より複雑なクエリに関しては、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 B
ただし、正しいパスをたどっていることを確認するには、Table 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'
これを機能させる方法についてのアイデアはありますか? これは可能ですか?