我的表如下所示:



我的USER_ID是1,我是USER_ID = 23的朋友。
我尝试了许多查询,以从表“ user”中搜索所有其他用户名,这些名称尚未在我的朋友列表中。这是查询之一(下面列出),尝试使用,但显示重复的条目

select *
from frnd,user
where frnd.frnd_id != user.USER_ID
      AND user.USER_ID != frnd.frnd_id
      AND frnd.USER_ID = 1
      AND NAME LIKE '%rah%';


还有另一个问题是,我的书(用于我的大学项目)没有告诉我有关LEFT JOINJOINS等问题的任何信息。有没有一种方法可以查询这种情况?

最佳答案

表“ user”中所有其他用户的名字,这些名字还不在我的朋友列表中。


那将是:

SELECT *
  FROM user
 WHERE user.user_id NOT IN
        ( SELECT frnd.frnd_id
            FROM frnd
           WHERE user_id = 1
        )
;


您可能还需要AND user.user_id != 1,并且当然可以添加任何其他限制,例如您的AND name LIKE '%rah%'

SELECT *
  FROM user
 WHERE user.user_id != 1
   AND user.user_id NOT IN
        ( SELECT frnd.frnd_id
            FROM frnd
           WHERE user_id = 1
        )
   AND user.name LIKE '%rah%'
;

10-08 19:22