【发布时间】:2015-11-11 18:48:21
【问题描述】:
我有 3 张桌子,我想将所有桌子连接起来。但我的第三张桌子不工作。
看看我的桌子 -
用户
id | username |is_active
----------|----------------|------------
1 | chinu | 1
2 | sradhanjali | 1
3 | User3 | 0
设置
id | user_id | public_msg_notification
----------|-----------|---------------------------
1 | 1 | 1
2 | 2 | 1
3 | 3 | 1
朋友
id | user_id | friend_id | is_block
----------|-----------|---------------------------
1 | 3 | 1 | 0
2 | 1 | 2 | 1
3 | 3 | 2 | 0
查询
SELECT a.username FROM users a
JOIN settings b
JOIN friends c ON(a.id=c.user_id OR a.id=c.friend_id)
WHERE a.username IN('john','piter','rahul','sradhanjali')
AND a.id != '1' AND a.is_active=1
AND a.id=b.user_id AND b.public_msg_notification=1
AND c.is_block=0 GROUP BY a.username
我已经在我的本地运行了这个查询,只提取了sradhanjali 用户名。但是friends 表中的这个用户is_block=1。
我认为我的第三张桌子 friends 不工作。我想向那些is_block=0 的用户展示这个结果。在上面的数据中,我的输出应该为零(0)但是在执行上面的查询时我得到了 1 条记录。
【问题讨论】:
-
您忘记了
ON的JOIN settings b部分 -
无需在
settings表中添加ON -
@CodeGodie 根据您的评论,我在查询中添加了
ON。未发现任何更改 -
为了给您正确的答案,让我们知道您的预期输出是什么?
-
你是对的,没有需要为
settings添加ON,但是你的a.id=b.user_id和ON完全一样,而且更好当你把它写成ON