我有两张桌子:
table1
id message user
1 testing 23
2 testing again 44
3 test.. 23
5 lol 12
6 test.. 6
和
table2
id user friend
1 23 44
2 23 6
3 19 12
4 23 32
5 23 76
6 23 89
我正在尝试获取messages
所有朋友的23
,其中包括23
像:
id message user id user friend
1 testing 23 n n n
2 testing again 44 1 23 44
3 test.. 23 n n n
6 test.. 6 2 23 6
我们可以看到12
丢失了,因为他不是23
的朋友,只有19
我有这个
SELECT *
FROM table1 AS w
INNER JOIN table1 AS f ON w.user = f.friend
WHERE (w.user = 23)
但如果23
有消息但没有朋友,则会返回null,这也会返回23
的其他朋友,例如76 and 89
没有消息的人。
:)困惑?
任何想法?
感谢
答案 0 :(得分:1)
这样的事情应该可以解决问题,尽管内部查询可能需要稍微修改一下。
SELECT table1.*, table2.*
FROM table1
INNER JOIN
(
SELECT *
FROM table2
WHERE user = 23 or friend = 23
)
AS table2 ON table1.user = table2.user;
答案 1 :(得分:1)
问题在于你正在使用INNER JOIN而不是LEFT / RIGHT join
内部联接返回结果,在您查询的两个表上都有寄存器,因此如果用户没有任何朋友,则不会显示结果,与消息相同。
中找到有关不同类型联接的详细信息答案 2 :(得分:0)
试试这个:
SELECT
table1.*,
table2.*
FROM
table2
RIGHT JOIN table2
ON table2.friend = table1.user
WEHRE
table2.user = 23