帮助 MySQL 查询语法:错误 #1066 - 不是唯一的表/别名

Posted

技术标签:

【中文标题】帮助 MySQL 查询语法:错误 #1066 - 不是唯一的表/别名【英文标题】:Help with MySQL Query syntax: ERROR #1066 - Not unique table/alias 【发布时间】:2010-10-14 18:22:27 【问题描述】:

我有四张桌子,useruser_billingprofileuser_shippingprofileuser_address

用户: userId,创建日期user_billingprofile: userId,地址user_shippingprofile: userId,地址user_address:随机地址废话

这是我必须一次性获得用户计费和运输资料的查询。

SELECT * FROM `user`
  JOIN `user_billingprofile`  ON `user`.`userId` = `user_billingprofile`.`userId`
    JOIN `user_address` ON `user_billingprofile`.`currentAddress` = `user_address`.`addressId`
  JOIN `user_shippingprofile` ON `user_shippingprofile`.`currentAddress` = `user_address`.`addressId`
    JOIN `user_address` ON `user_shippingprofile`.`currentAddress` = `user_address`.`addressId`

我收到错误:#1066 - Not unique table/alias: 'user_address'有没有办法进行简单的连接,在同一个查询中访问一个表两次,并将两个结果分开?最好使用某种表前缀...

我有点迷路了。我知道我可以很容易地在两个单独的查询中做到这一点,但我想学习如何一次性完成这样的事情。

非常感谢任何帮助/建议/指导,谢谢!。

【问题讨论】:

【参考方案1】:

你能发布你的表格结构吗?根据您的查询,我会说您需要考虑对其进行一些更改。

也就是说,您可以通过像这样添加表别名来修复当前查询:

SELECT * FROM `user`
  JOIN `user_billingprofile`  ON `user`.`userId` = `user_billingprofile`.`userId`
    JOIN `user_address` AS user_billing_address ON `user_billingprofile`.`currentAddress` = `user_address`.`addressId`
  JOIN `user_shippingprofile` ON `user_shippingprofile`.`currentAddress` = `user_address`.`addressId`
    JOIN `user_address` AS user_shipping_address ON `user_shippingprofile`.`currentAddress` = `user_address`.`addressId`

注意我添加的AS 子句。您可能还需要为列加上别名(而不是 SELECT *,您可能需要 SELECT user_shipping_address.address AS user_shipping_address_value, user_billing_address.address AS user_billing_address_value ...

希望有帮助!

【讨论】:

以上是关于帮助 MySQL 查询语法:错误 #1066 - 不是唯一的表/别名的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 语法错误或访问冲突:1066 不是唯一的表/别名

SQLSTATE [42000]:语法错误或访问冲突:1066 Not unique table/alias on relationship

mysql错误1066

错误 #1066 - MySQL 中的表/别名不是唯一的

错误代码:1066。不是唯一的表/别名:'ordertbl' - 无法执行内部连接 ​​MYSQL

CakePHP 语法错误或访问冲突