代码之家  ›  专栏  ›  技术社区  ›  Derek Adair

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

  •  1
  • Derek Adair  · 技术社区  · 14 年前

    user , user_billingprofile , user_shippingprofile ,和 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 回复  |  直到 14 年前
        1
  •  3
  •   Cfreak    14 年前

    你能把你桌子的结构贴出来吗?根据你的询问,我想你需要考虑把它改一下。

    也就是说,可以通过添加如下表别名来修复当前查询:

    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 ... )

    希望能有帮助!