sql - 选择多个 PRIMARY KEY
问题描述
我有 3 张桌子:
nation (name PRIMARY KEY);
city (name PRIMARY KEY, nation REFERENCES nation(name))
overflight (number, city, PRIMARY KEY (number, city))
飞越表内容如下所示:
AA11 city1
AA11 city2
BB22 city1
BB22 city3
等等
我只需要在城市字段中选择没有来自某个国家的城市的飞越。
我试过:
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 的城市的飞越行,但可能发生相同的飞越在表中有另一行在 some_nation 中没有城市的情况。如何仅显示在 some_nation 中根本没有城市的飞越?
希望我已经尽可能清楚地解释了我的问题。
编辑
这是飞越表的确切内容:
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 * 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'
)
请参阅演示。
结果:
数字 | 城市 |
---|---|
AA 1 | 纽约 |
AA 1 | 洛杉矶 |
巴 2430 | 纽约 |
巴 2430 | 洛杉矶 |
推荐阅读
- ruby-on-rails - 未定义的方法 `scoped' for #
- knockout.js - 在 Knockout 中绑定后如何重新绑定?
- c# - 检查消息 ID 数组或消息 ID 列表中是否不存在值 SearchFilter.SearchFilterCollection
- sql - 如何在 Hive 表中插入回溯数据?
- javascript - 无法将图像设置为背景
- python - skimage.morphology.watershed 导致 32 位内核死亡
- azure - azure cosmos 分区键的最大值
- .net-core - 在安装了 2.1 的服务器上运行 Core 2.0.x
- php - 如何在 Laravel 中为单例创建外观?
- apache - Apache OpenNLP python 包装器 - 服务器超时