1

MySQL では、直接 (テーブルの結合)または別のテーブルの結合 ( )を介してSELECT A.* FROM A、内部結合条件が満たされる場所が必要です。結果を得るための適切な方法を誰かが指摘できますか?BCWHERE B.field = myvalue

次のテーブルがあります: A、B、C は次のように関連付けられています (A は B に参加し、B は C に参加し、A は C に参加します)。

      B
    /   \
   A --- C

非常に単純に見えますが、検索を B から C への結合のみに制限すると結果が得られるにもかかわらず、次のコードを実行すると空のセットが得られます。

SELECT A.* FROM A
INNER JOIN C ON C.id = A.c_id
INNER JOIN B AS B_thru_C ON B_thru_C.id = C.b_id
INNER JOIN B AS B_from_A ON B_from_A.id = A.b_id
WHERE B_thru_C.field = 'myvalue' OR B_from_A.field = 'myvalue';
# yields an empty set

SELECT A.* FROM A
INNER JOIN C ON C.id = A.c_id
INNER JOIN B AS B_thru_C ON B_thru_C.id = C.b_id
WHERE B_thru_C.field = 'myvalue';
# yields results
4

1 に答える 1

0

これはどう?

SELECT A.* FROM A
LEFT OUTER JOIN C ON C.id = A.c_id
INNER JOIN B ON B.id = A.b_id OR B.id = C.b_id
WHERE B.field = 'myvalue';
于 2013-04-05T04:08:02.987 に答える