【发布时间】:2010-09-29 17:47:31
【问题描述】:
当涉及到更复杂的查询时,我不愿承认我对 MySQL 的了解不足。基本上我有四个表,其中两个包含我要返回的数据,两个是链接数据的关系表。 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 A > Table B 关系 Table C 所属的 Table B。我意识到允许重复的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'
关于如何让它发挥作用的任何想法?这甚至可能吗?
【问题讨论】:
-
正如您提到的需要简单查询(并且由于您的键列具有匹配的名称),您可能希望考虑将
on (tablex.xID = tabley.xID)替换为using xID。 -
我不知道我能做到这一点。谢谢你的提示。
标签: mysql join mysql-error-1066