-1

私には5つの関係があります:A、B、A_B、C、D。私が試しているのは、A&Bペアを取得し、

SELECT A.aName, B.bName, C.cName, D.dName 
FROM `A` , `B` , `A&B` , `C` , `D`
WHERE B.bName= A_B.bName
AND A.aName = A_B.aName
AND A.cName = C.cName
AND C.dName = D.dName

しかし、これは私が思ったようには機能しません。AのA_Bマッピングがさらにある場合でも、Aごとに1つのエントリのみを表します。

UPDATE2:

TableAには

-------------
t1key | t2key
--------------
a1        c1
a2        c2
a3        c1
a4        c1


Table B
------------
t3key | t4key
-------------
b1      XXX
b2      XXX
b3      XXX
b4      XXX
b5      XXX


Table A&B
------------
t1key | t3key
-------------
a1      b1
a1      b2
a1      b3
a3      b1
a4      b2


Table C
------------
t2key | t4key
-------------
c1      d1
c2      d2
c3      d1
c4      d3
c5      d1

結果は次のようになります

a1   b1 c1 d1
a1   b2 c1 d1
a1   b3 c1 d1
a3   b1 c2 d2
a4   b2 c1 d1

ご覧のとおり、この結果にはa1に3つのエントリがあります...

4

1 に答える 1

0

最初に行うべきことは、「昔ながらの」暗黙的な結合構文を避け、明示的な構文 (ON条件を使用する結合) を使用することを学ぶことです。そうすれば、すべてがはるかに理解しやすくなります。次に、さまざまな種類の結合、特にLEFT JOIN.

それを念頭に置いて、これがあなたが望むものであるかどうかを確認してください:

SELECT A.aName, B.bName, C.cName, D.dName
FROM  `A&B`
LEFT JOIN `A`
ON   A.aName = A_B.aName
LEFT JOIN `B`
ON   B.bName = A_B.bName
LEFT JOIN `C` 
ON   C.cName = A.cName
LEFT JOIN `D`
ON  D.dName = C.dName
于 2013-01-12T16:01:35.217 に答える