我有两张桌子:
|id| username |
-------------------
|1 |John Doe |
|2 |Jane Doe |
|3 |Luke Skywalker|
|id|user_id|group_id|
---------------------
|1 |1 |5 |
|2 |1 |6 |
|3 |2 |6 |
我正在尝试过滤掉组中已有的用户,因此无法将同一用户添加到同一组中。
如何选择让表示table1中所有不在table2中的group_id = 5的用户?
答案 0 :(得分:2)
SELECT u.*
FROM table1 u
WHERE NOT EXISTS (
SELECT 1
FROM table2 g
WHERE g.user_id = u.id AND g.group_id = 5
)
答案 1 :(得分:2)
您可以使用:
SELECT * FROM table1 WHERE id NOT IN (SELECT user_id FROM table2 WHERE group_id=5)
但是,为了确保唯一性,你最好在table2的(user_id, group_id)
上添加一个独特的键:
ALTER TABLE table2 ADD UNIQUE KEY unique_user_group (user_id, group_id);
通过这种方式,MySQL本身不会接受重复记录,而无需每次都在应用程序端进行检查。
答案 2 :(得分:1)
您需要使用带<>的join子句在where子句中。假设他们加入了user_id,这应该可行。
这将为您提供两个表的结果,而不包括表2中= 5的结果。
SELECT *
FROM table1 t1
INNER JOIN table2 t2 ON t2.user_id = t1.id
WHERE t2.group_id <> 5