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なので、それが欠けていることがわかります2319

私はこれを持っています

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

問題は、LEFT/RIGHT結合の代わりにINNERJOINを使用していることです。

クエリしている両方のテーブルにレジスタがある内部結合の結果が返されるため、ユーザーに友達がいない場合は、メッセージと同じように結果に表示されません。

さまざまな種類の結合の詳細については、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 に答える