Sql Query - 坚持简单的左连接

时间:2010-03-08 10:06:00

标签: sql mysql

过去3个小时我一直坚持使用这个简单的Sql查询,我的想法是空白。

我有一个用户表来捕获名称user_id等 然后我有一个朋友表,捕捉谁是谁的朋友和他们的状态

用户

USER_ID
名称

朋友

friend_id
USER_ID
user_friend_id
状态(已加入,待决等)

我想要做的是 - 当登录用户搜索名称“John”时 - 显示网站上所有johns的列表以及每个John旁边的一个列表 - 使用friends表进行查找以查看是否记录存在 - 即,如果登录的用户是任何约翰的朋友

  • 如果存在则显示当前状态
  • 如果不存在则显示“添加好友”

所以我应该先在User表上运行一个查询,例如从User中选择user_id,其名称为'John%',然后使用这些Id并在Friends表中运行它们。

我无法得到它。 感谢

3 个答案:

答案 0 :(得分:2)

您从符合您的标准的所有用户开始(我不确定确切的MySQL语法):

SELECT u.user_id
FROM User u
WHERE u.name LIKE '%John%'

这为您提供了所有目标用户。接下来,您需要Friend表上的外部联接,您可以将结果限制为当前登录的用户:

SELECT u.user_id, f.status
FROM user u
LEFT OUTER JOIN Friend f ON f.friend_id = u.user_id
WHERE f.user_id = <currentUserId> AND u.name LIKE '%John%'

您得到的是一个结果集,其中包含名为John的所有用户的用户ID以及状态标志为null或实际状态。如果它是null,你有一个潜在的新朋友,如果没有,你有一个现有的朋友。

答案 1 :(得分:1)

这样的事情可能会让你开始。

SQL语句

SELECT u.name, COALESCE(f.Status, 'Add Friend')
FROM   User u 
       LEFT OUTER JOIN Friend f ON f.User_ID = u.User_ID
WHERE  u.name = 'John'

答案 2 :(得分:1)

以下查询必须解决您的问题

select a.user_name,case when a.user_name like 'John%' then b.status else 'Add Friend' end case from users_det a,friend b where a.user_id = b.user_id