【问题标题】:Why does this SQL code require "country_code" to run instead of just "code?"为什么这个 SQL 代码需要“country_code”而不是“code”才能运行?
【发布时间】: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


【解决方案1】:

where 用于从关键字“FROM”之后的表格中过滤一些数据。 你的sql可以这样写

SELECT name
FROM cities AS c1
WHERE c1.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);

以下是帮助理解的示例

SELECT name
    FROM cities AS c1
    WHERE c1.country_code IN ('code1','code2','code3')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-22
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多