mysql - sql查询以获取具有条件的行
问题描述
我想同时从表a中获取unique_key列在表b中的行,表c中不存在unique_key。所以如果我写表,
table a
+----+------+-----------+
| id | Name | int_value |
+----+------+-----------+
| a1 | aa | 1 |
| a2 | bb | 2 |
| a3 | cc | 5 |
+----+------+-----------+
table b
+----+------+-----------+
| id | Name |unique_key |
+----+------+-----------+
| a1 | aa | u1 |
| a2 | bb | u2 |
| a3 | cc | u5 |
+----+------+-----------+
table c
+----+------+-----------+
| id | Name |unique_key |
+----+------+-----------+
| c1 | aa | u1 |
| c2 | bb | u2 |
| c3 | cc | u3 |
+----+------+-----------+
结果,我想得到
id name int_value b.unique_key
a3 cc 5 u5
因为 u5 在表 c 中不存在。我尝试了这些 sql,但没有一个能得到正确的结果。你会怎么做?
SELECT a.*, b.unique_key
FROM a
LEFT JOIN ( SELECT id FROM b ) b
ON a.id = b.id
LEFT JOIN ( SELECT unique_key FROM c ) c
ON b.unique_key <> c.unique_key;
SELECT a.*, b.unique_key, c.unique_key
FROM a
LEFT JOIN ( SELECT id FROM b ) b
ON a.id = b.id
LEFT JOIN ( SELECT unique_key FROM c ) c
ON b.unique_key = c.unique_key
WHERE c.unique_key IS NULL;
解决方案
另一种方法是使用 NOT IN
SELECT a.id, a.name, a.int_value, b.unique_key
FROM a
JOIN b ON a.id = b.id
WHERE b.unique_key NOT IN (SELECT DISTINCT c.unique_key FROM c)
结果
id: a3, name: cc, int_value: 5, unique_key: u5
推荐阅读
- angularjs - AngularJS自定义过滤器重复
- css - 用于类和属性的 CSS 选择器
- php - 执行 SELECT 时 mysqli::num_rows 和 mysqli::affected_rows 之间是否有真正的区别
- oracle - 调用带有 out 参数的 SP
- python - ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 而言太大但 id 没有的值,异常检测
- python - 用txt文件叠加一些图
- javascript - 视频无法通过异步可观察调用播放
- typescript - 将无类型的 JavaScript 选项属性添加到声明的类
- javascript - 数据表更新单元格值不显示
- python - 他们在 django 模型上使用 @property 装饰器而不是将字段直接保存到数据库中是否有任何时间优势