mysql在一个表中查找没有列值的记录

guykilcj  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(342)

我有表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。

pxy2qtax

pxy2qtax1#

可以使用子查询,例如:

SELECT *
FROM table1
WHERE user_id NOT IN
    (SELECT user_id
     FROM table2
     WHERE checklist_item_id = 111)
6jygbczu

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

erhoui1w

erhoui1w3#

使用相关子查询

select t1.* from  table1 t1 where t1.user_id not in
( select user_id from table2 t2
   where t2.user_id=t1.user_id
   and checklist_item_id=111
)

或使用 not exist 哪一种方法比不使用更有效

select t1.* from table1 t1 where not exists
    ( select 1 from table2 t2  where t2.user_id=t1.user_id and 
    checklist_item_id=111
    )

小提琴演示

id  userid  itemid
4   234     110
5   234     112

如果你只需要一个身份证

select distinct t1.userid from  t1 where not exists
    ( select 1 from t1 t2  where t2.userid=t1.userid and 
    itemid=111
    )

输出

userid
  234

演示

相关问题