sql与外键表连接

时间:2013-12-17 14:42:39

标签: mysql sql

我想从我的数据库中选择所有使用@gmail.com结尾的电子邮件groupID的用户。

问题是我的user_to_group表看起来像这样:

userID | groupID
--------------------
1      | 5
1      | 4
1      | 3
2      | 3
2      | 6

排除了groupID 4的用户,但由于他们也在其他群组中,因此无论如何都会选择这些用户。在此示例中,我只需要具有userID 2。

的用户

是否可以排除第4组中的用户而不管其他组?

SELECT * FROM wcf13_user user_table
RIGHT JOIN wcf13_user_to_group ON (wcf13_user_to_group.userID = user_table.userID && groupID != 4 )
WHERE user_table.email LIKE "%@gmail.com"

2 个答案:

答案 0 :(得分:4)

是的,您可以使用EXISTS子查询来执行此操作:

SELECT *
FROM wcf13_user user_table u
WHERE user_table.email LIKE "%@gmail.com" -- Has a gmail account
  AND NOT EXISTS (                        -- Is not a member of group #4
       SELECT *
       FROM wcf13_user_to_group g
       WHERE u.userID=g.userID AND groupID = 4
  )

答案 1 :(得分:3)

这是使用not exists子句的好地方:

SELECT ut.*
FROM wcf13_user ut 
WHERE not exists (select 1
                  from wcf13_user_to_group utg
                  where utg.userID = ut.userID and utggroupID = 4
                 ) and
      ut.email LIKE '%@gmail.com';