我有表1,包含列(简化):
+-------------------------+
| id | user_id | username |
+----+---------+----------+
| 1 | 123 | peter |
| 2 | 234 | john |
+-------------------------+
和表2,包含列(简化):
+----------------------------------+
| id | user_id | checklist_item_id |
+----+---------+-------------------+
| 1 | 123 | 110 |
| 2 | 123 | 111 |
| 3 | 123 | 112 |
| 4 | 234 | 110 |
| 5 | 234 | 112 |
+----------------------------------+
如上所示,表1中的每个user\u id条目都有多个user\u id条目和多个checklist\u item\u id。
我只想返回第二个表中没有checklist\u item\u id=111条目的记录。查询只能返回:
+---------+
| user_id |
+---------+
| 234 |
+---------+
因为用户id为123的用户在表2中有一个条目,清单项目id为111。
3条答案
按热度按时间pxy2qtax1#
可以使用子查询,例如:
6jygbczu2#
最简单有效的方法是
LEFT JOIN
,并过滤掉那些没有匹配记录的行checklist_item_id = 111
```SELECT DISTINCT t1.user_id
FROM table1 AS t1
LEFT JOIN table2 AS t2 ON t2.user_id = t1.user_id AND
t2.checklist_item_id = 111
WHERE t2.user_id IS NULL
erhoui1w3#
使用相关子查询
或使用
not exist
哪一种方法比不使用更有效小提琴演示
如果你只需要一个身份证
输出
演示