SELECT 有多个 PRIMARY KEY
SELECT with multiple PRIMARY KEY
我有3个table:
nation (name PRIMARY KEY);
city (name PRIMARY KEY, nation REFERENCES nation(name))
overflight (number, city, PRIMARY KEY (number, city))
飞越table内容如下:
AA11 city1
AA11 city2
BB22 city1
BB22 city3
等等
我只需要select飞越城市字段中没有来自某个国家的城市。
我试过:
SELECT number
FROM overflight
JOIN city ON overflight.city = city.name
WHERE overflight.city NOT IN (
SELECT name FROM city WHERE nation = some_nation
)
GROUP BY number;
但它不起作用,因为它没有列出来自 some_nation 的城市的飞越行,但可能会发生相同的飞越在 table 中有另一行没有' some_nation 没有城市。我怎样才能只显示 some_nation 中根本没有城市的飞越?
希望我已经尽可能清楚地解释了我的问题。
编辑
这是飞越的确切内容 table:
AZ 7255 Rome
AZ 7255 Milan
AZ 608 Rome
AZ 608 New York
AA 1 New York
AA 1 Los Angeles
BA 2430 New York
BA 2430 Los Angeles
假设我想展示不飞越意大利任何城市的飞越。我需要这样的结果
AA 1 New York
AA 1 Los Angeles
BB 2430 New York
BB 2430 Los Angeles
加入表格以获取确实有您要排除的国家/地区的城市的飞越航班号码,并使用运算符 NOT IN
到 select 所有其他飞越航班:
SELECT * FROM overflight
WHERE number NOT IN (
SELECT o.number
FROM overflight o INNER JOIN city c
ON o.city = c.name
WHERE c.nation = 'Italy'
)
参见demo。
结果:
number
city
AA 1
New York
AA 1
Los Angeles
BA 2430
New York
BA 2430
Los Angeles
我有3个table:
nation (name PRIMARY KEY);
city (name PRIMARY KEY, nation REFERENCES nation(name))
overflight (number, city, PRIMARY KEY (number, city))
飞越table内容如下:
AA11 city1
AA11 city2
BB22 city1
BB22 city3
等等
我只需要select飞越城市字段中没有来自某个国家的城市。
我试过:
SELECT number
FROM overflight
JOIN city ON overflight.city = city.name
WHERE overflight.city NOT IN (
SELECT name FROM city WHERE nation = some_nation
)
GROUP BY number;
但它不起作用,因为它没有列出来自 some_nation 的城市的飞越行,但可能会发生相同的飞越在 table 中有另一行没有' some_nation 没有城市。我怎样才能只显示 some_nation 中根本没有城市的飞越?
希望我已经尽可能清楚地解释了我的问题。
编辑
这是飞越的确切内容 table:
AZ 7255 Rome
AZ 7255 Milan
AZ 608 Rome
AZ 608 New York
AA 1 New York
AA 1 Los Angeles
BA 2430 New York
BA 2430 Los Angeles
假设我想展示不飞越意大利任何城市的飞越。我需要这样的结果
AA 1 New York
AA 1 Los Angeles
BB 2430 New York
BB 2430 Los Angeles
加入表格以获取确实有您要排除的国家/地区的城市的飞越航班号码,并使用运算符 NOT IN
到 select 所有其他飞越航班:
SELECT * FROM overflight
WHERE number NOT IN (
SELECT o.number
FROM overflight o INNER JOIN city c
ON o.city = c.name
WHERE c.nation = 'Italy'
)
参见demo。
结果:
number | city |
---|---|
AA 1 | New York |
AA 1 | Los Angeles |
BA 2430 | New York |
BA 2430 | Los Angeles |