0

我有 2 张桌子:

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消息的朋友。

:) 使困惑?

有任何想法吗?

谢谢

4

3 回答 3

1

像这样的东西应该可以解决问题,尽管可能需要稍微修改内部查询。

SELECT table1.*, table2.* 
FROM table1 
INNER JOIN 
(
    SELECT * 
    FROM table2 
    WHERE user = 23 or friend = 23
) 
AS table2 ON table1.user = table2.user; 
于 2012-07-28T02:12:32.110 回答
1

问题在于您使用的是 INNER JOIN 而不是 LEFT/RIGHT 连接

内部联接返回的结果在您查询的两个表上都有寄存器,因此如果用户没有任何朋友,它不会出现在结果中,与消息相同。

您可以在http://en.wikipedia.org/wiki/Join_(SQL )中找到有关不同类型连接的更多信息

于 2012-07-28T02:18:33.907 回答
0

试试这个:

SELECT 
    table1.*, 
    table2.* 
FROM 
    table2 
        RIGHT JOIN table2 
        ON table2.friend = table1.user 
WEHRE 
    table2.user = 23
于 2012-07-28T02:12:23.407 回答