如何引用创建的不同表 WITH ... AS
声明?
这是我的密码
WITH TABLE1 AS
(
SELECT code
FROM Product
WHERE pname <> "cucumber"
),
TABLE2 AS
(
SELECT bid, rdate, rtime, code
FROM Purchase
WHERE code IN TABLE1
),
TABLE3 AS
(
SELECT COUNT(*) AS AMOUNT, bid, rdate, rtime
FROM TABLE2
NATURAL JOIN Receipt
WHERE total > 50
GROUP BY bid, rdate, rtime;
),
TABLE4 AS
(
SELECT *
FROM TABLE3
WHERE AMOUNT = ALL(SELECT MIN(AMOUNT)
FROM TABLE3)
)
SELECT *
FROM Receipt
WHERE bid, rdate, rtime = ALL(SELECT bid, rdate, rtime
FROM TABLE4);
table是空的
产品(代码(产品代码)、pname、descr、utype、uprice、manu、sid(供应商id))
收据((pk)(bid,rdate,rtime),ptype,total)
采购((pk)(投标、日期、时间、代码)、单位)
而问题是“找到供应商数量最少的收据,总共有50多家,里面没有买 cucumber (我提供此信息是为了防止询问x y问题)
如您所见,我正在尝试构建它,以便创建的每个新表都依赖于prevision表。但是当我这样做的时候,我得到了一个错误,我不能引用prevision表(可能因为它被算作同一个查询)
在语句之间尝试分号也不起作用。
2条答案
按热度按时间b1zrtrql1#
本部分:
这就是问题所在。这与你的CTE无关。
如果要比较多个列,必须将它们括在左侧的括号中:
另外:
"cucumber"
引用名为cucumber
. 在sql中,字符串常量需要用单引号括起来:3bygqnnd2#
首先,不要重复
with
. 第二,像引用任何表或视图一样引用它们:其他注意事项:
字符串使用单引号。尽管有些数据库支持双引号,但只需使用sql标准即可。
限定列引用,特别是当您有多个表引用时。
我把cte的名字从“table”改成了“cte”。我认为“表”是误导。