根据另一个表中的数据选择数据

时间:2011-12-14 14:42:32

标签: mysql

我有两张桌子:

|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的用户?

3 个答案:

答案 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