如何使用LIKE进行朋友搜索而不显示已经在我朋友列表中的朋友?

时间:2012-01-26 14:47:07

标签: java mysql

我的表格如下:

screenshot of table data

我的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等事情的任何信息。有没有办法获得这种情况的查询?

3 个答案:

答案 0 :(得分:1)

  

表“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%'
;

答案 1 :(得分:0)

您需要使用子查询

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

答案 2 :(得分:0)

您需要使用子查询。 此示例将显示所有不是%prash%的朋友:

select * 
from [user]
where USER_ID not in (
    select frnd_id
    from frnd
    where [user_id] in ( select [USER_ID] from [user] where NAME like '%prash%' )
    )
    and NAME not like '%prash%'

这将在没有ID的情况下过滤两种方式,但如果您使用的搜索字符串将超过一个用户,则会过滤掉它。 你必须检查有多少用户加工搜索字符串并迭代它。

如果您正在寻找有关联接和SQL的信息,请尝试此处:http://www.w3schools.com/sql/sql_join.asp