两个相关表之间的查询

时间:2011-02-24 14:53:49

标签: mysql sql

我必须去桌子。其中一个user_profile有一个名为user_profile_id的字段,另一个表user_friend有两个名为user_profile1_iduser_profile2_id的字段(它们是FK到第一个表)。

我想检查user_profile中是否有任何用户不在user_friend表中,user_profile1_id和user_profile2_id中都没有。我应该使用什么查询!?

4 个答案:

答案 0 :(得分:2)

首先,我建议您在user_profile_table中使用循环外键,其中外键引用回同一个表的主键。这样您就可以自己创建另一个表,仅用于用户之间的关系。

但是,使用您的设计,您可以使用以下查询:

SELECT user_profile_id 
FROM user_profile A
 WHERE 
  NOT EXISTS(
      SELECT * FROM user_friends B 
       WHERE B.user_profile1_id=A.user_profile_id OR 
             B.user_profile2_id=A.user_profile_id
            )

答案 1 :(得分:1)

试试这个


SELECT * FROM users
LEFT JOIN friends f1 ON (users.id = friends.uid)
LEFT JOIN friends f2 ON (users.id = friends.fid)
WHERE f1.uid IS NULL AND f2.uid IS NULL

答案 2 :(得分:1)

尝试(这是MSSQL,但在MySQL中应该类似)

select 
   *
from
   user_profile up
   left join user_friend uf
     on up.user_profile_id = uf.user_profile1_id
     or up.user_profile_id = uf.user_profile2_id
where
     coalesce(uf.user_profile1_id,uf.user_profile2_id) is null

答案 3 :(得分:0)

尝试:

SELECT user_profile_id 
FROM user_profile
WHERE 
  user_profile_id NOT IN (SELECT DISTINCT user_profile1_id FROM user_friend)
  AND user_profile_id NOT IN (SELECT DISTINCT user_profile2_id FROM user_friend)

可能有更高效的查询,但这应该可以胜任。