【发布时间】:2021-02-04 22:43:19
【问题描述】:
我正在参加一个 SQL 练习课程,并且我试图理解为什么以下代码只有在我按照我将为您复制/粘贴它的确切方式运行时才有效。具体来说,我想知道为什么在我的 WHERE 子句中需要“country_code”,而不仅仅是“code”。如果您查看我的子查询,您会看到我从前两个表中选择了“代码”。 “country_code”列仅在 EXCEPT 子句之后相关,因为我特别想要人口表的“country_codes”中未列出的代码。难道不应该遵循我的 WHERE 子句顶部需要有“代码”吗?当我将其更改为“代码”时,它不起作用。它只接受“country_code”
事实上,如果我只自己运行子查询,那么显示的唯一列就是“代码”列,这就是我要搜索的内容。
SELECT name
FROM cities AS c1
WHERE country_code IN
(SELECT e.code
FROM economies AS e
UNION
SELECT c2.code
FROM currencies AS c2
EXCEPT
SELECT p.country_code
FROM populations AS p
ORDER BY code);
【问题讨论】:
-
因为
country_code字段在表cities中,而code不在。 -
cities表的列是什么?这就是WHERE子句相对于 -
我明白了。是的@AdrianKlaver 城市表中的列是国家代码,而不是代码。我之前检查过,但我想我脑子有屁,并认为 country_code 只在人口表中。
标签: sql postgresql subquery