【发布时间】:2017-08-25 15:46:52
【问题描述】:
我目前正在使用 Oracle SQL developer 学习 SQL。
在编写查询时,我想出了同一个查询的三个不同版本。
SELECT
sh.share_id
FROM shares sh
LEFT JOIN trades tr
ON sh.share_id = tr.share_id
WHERE trade_id is NULL;
SELECT
sr.share_id
FROM (SELECT sh.share_id, tr.trade_id
FROM shares sh
LEFT JOIN trades tr
ON sh.share_id = tr.share_id) sr
WHERE sr.trade_id is NULL;
SELECT
sr.share_id
FROM (SELECT *
FROM shares sh
LEFT JOIN trades tr
ON sh.share_id = tr.share_id) sr
WHERE sr.trade_id is NULL;
前两个查询编译、运行并返回相同的结果集,但是当我尝试运行第三个查询时,第三个查询的第二行出现错误。 "SR"."SHARE_ID":无效标识符。 我知道 SELECT 语句中的 * 选择了所有列,那么为什么会出现此错误?
【问题讨论】:
-
两个表都有“trade_id”列吗?
-
只有交易表有“trade_id”列
-
抱歉,我无意询问trade_id,但“share_id”是在两张桌子上还是其中一张上?
-
交易表和股票表中都有“share_id”。
-
第三个查询不知道你想引用哪个
share_id。这也是SELECT *如此糟糕的原因之一。