2010-03-08 50 views
1

我已经坚持了近3小时内这个简单的SQL查询,我的心是拉坯。SQL查询 - 坚持使用简单的左加入

我有一个用户表捕获名USER_ID等 后来我有一个朋友表捕获谁是谁的朋友,他们的状态

用户

USER_ID

朋友

friend_id
user_id说明
user_friend_id
状态(accepeted,等待等)

我想要做的是 - 在用户搜索时所记录的名字说:“约翰” - 在网站上显示的所有嫖客的名单,相邻的约翰 - 做一个查找与朋友表,看是否存在记录 - 即如果登录用户是任何的约翰

  • 朋友如果存在显示当前状态
  • 如果它不存在然后显示“添加朋友”

所以我应该首先运行像用户选择user_ID的地方名称,如“约翰%”上的用户表的查询,然后使用这些ID和运行它们友表。

我没有能够得到它。 感谢

+0

哎MDM - 这是我在做什么,到目前为止 - 运行一个单独的查询,以便从用户表 得到user_ud的名字,像约翰 - 然后检查每个这些user_id与朋友表,看看他们中的任何人是否是已登录用户的朋友 这有效,但我想如果有一个单一的查询,我可以编写来实现这一点 - 返回每个user_id约翰名称 - 与登录用户的友谊状态是什么,如果他们不是fr,则为null iends – Gublooo 2010-03-08 10:20:27

回答

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或实际状态。如果它是空的,你有一个潜在的新朋友,如果没有,你有一个现有的朋友。

+0

谢谢 - 你提供的解释很清楚我出错的地方。 – Gublooo 2010-03-08 11:13:02

+0

+1必须同意。 – 2010-03-08 11:30:13

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' 
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