質問

認めたくないのですが、より複雑なクエリに関しては MySQL に関する知識が不足しています。基本的に 4 つのテーブルがあり、そのうちの 2 つは返したいデータが含まれており、2 つはデータをリンクするリレーショナル テーブルです。 Table A フィラーを提供するためだけに存在します Table D.aID.

+--------+ +--------+ +--------+ +-----------+ +-----------+
|Table A | |Table B | |Table C | |  Table D  | |  Table E  |
+---+----+ +---+----+ +---+----+ +---+---+---+ +---+---+---+
|aID|name| |bID|name| |cID|name| |dID|aID|bID| |eID|dID|cID|
+---+----+ +---+----+ +---+----+ +---+---+---+ +---+---+---+
| 1 | a_1| | 1 | b_1| | 1 | c_1| | 1 | 1 | 1 | | 1 | 1 | 1 |
+---+----+ | 2 | b_2| | 2 | c_2| | 2 | 1 | 2 | | 1 | 1 | 2 |
           +---+----+ | 3 | c_3| +---+---+---+ +---+---+---+
                      +---+----+

これらのテーブルで作成される関係は次のとおりです。 Table A > Table B > Table C. 。私が欲しいデータは Table B > Table C 関係。

+--------+---------+--------+---------+
|tblB.bID|tblB.name|tblC.cID|tblC.name|
+--------+---------+--------+---------+
|    1   |    a_1  |    1   |   c_1   |
|    1   |    a_1  |    2   |   c_2   |
|    2   |    a_2  |  NULL  |   NULL  |
+--------+---------+--------+---------+

ただし、正しいパスをたどっていることを確認するには、 Table BTable A > Table B 関係 Table C 属する。重複を許可することで、自分自身にとって物事をさらに困難にしていることに気づきました name 値はありますが、肥大化したテーブルと単純なクエリよりも、小さなテーブルとより複雑なクエリを使用したいと考えています。私が使用しているクエリは

SELECT * FROM `Table E`
LEFT JOIN `Table D` ON (`Table B`.bID = `Table D`.bID)
RIGHT JOIN `Table E` ON (`Table D`.dID = `Table E`.dID))
RIGHT JOIN `Table C` ON (`Table E.cID = `Table C`.cID);

しかし、これまでのところうまくいきません。クエリが送信されると、次のエラーが返されます。

ERROR 1066 (42000): Not unique table/alias: 'Table D'

これを機能させる方法について何かアイデアはありますか?これも可能でしょうか?

役に立ちましたか?

解決 2

マーティン・スミス私のおかげで、私はここに掲載しています解決策を考え出すことができました。私は、これは他のヘルプ誰かにできることがあります願っています。

SELECT  tblB.bID,
    tblB.name,
    tblC.cID,
    tblC.name
FROM Table E 
RIGHT JOIN Table B ON (Table B.bID = Table D.bID)
RIGHT JOIN Table D USING dID
RIGHT JOIN Table C USING cID;

他のヒント

あなたが送信しているとしているクエリは、あなたが私たちに提供したテーブル構造とほとんど似ていません。とは Table D.national_regionID?または modx.coverage_state?

ただし、一般的には、左結合と右結合を混合しないでください。また、クエリで使用されるすべてのテーブルは、次のいずれかに従う必要があります。 FROM またはフォローしてください JOIN. 。使っているようです Table B そして Table C 結合条件をクエリに追加することなく使用できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top