【问题标题】:How to join same column twice? [duplicate]如何两次加入同一列? [复制]
【发布时间】:2016-04-22 05:45:21
【问题描述】:

我正在建立一个交易网站并拥有这些表格

例子:

第一个是水果。

+----+--------+
| ID |  Name  |
+----+--------+
|  1 | Apple  |
|  2 | Orange |
|  3 | Banana |
+----+--------+

第二个是交易

+-----+-------+--------+-------+
| tID | first | second | third |
+-----+-------+--------+-------+
|   1 |     2 |      1 |     3 |
|   2 |     3 |      1 |     2 |
+-----+-------+--------+-------+

我想把它们加入一个表格中,显示第一个/第二个/第三个是什么意思,比如

+-----+-------+--------+--------+-------+-------+--------+
| tID | first |   n1   | second |  n2   | third |   n3   |
+-----+-------+--------+--------+-------+-------+--------+
|   1 |     2 | Orange |      1 | Apple |     3 | Banana |
|   2 |     3 | Banana |      1 | Apple |     2 | Orange |
+-----+-------+--------+--------+-------+-------+--------+

这是我的 sql

SELECT trade.tid ,trade.first , fruit.name AS n1,trade.second ,     
fruit.name AS n2,trade.third , fruit.name AS n3
FROM trade 
INNER JOIN fruit 
ON trade.first=fruit.id
INNER JOIN fruit 
ON trade.second=fruit.id
INNER JOIN fruit 
ON trade.third=fruit.id

我得到的回应是

Error Code: 1066. Not unique table/alias: 'card'

我该怎么办?是我的sql错了还是数据库不应该这样存储数据?

【问题讨论】:

    标签: mysql sql join inner-join


    【解决方案1】:

    您需要在表上使用别名。这通常是个好主意,当您在from 中多次拥有同一张表时,这是必要的:

    SELECT t.tid, t.first, f1.name AS n1, t.second, f2.name AS n2,
           t.third, f3.name AS n3
    FROM trade t LEFT JOIN
         fruit f1
         ON t.first = f1.id LEFT JOIN
         fruit f2 
         ON t.second = f2.id LEFT JOIN
         fruit f3
         ON t.third = f3.id;
    

    请注意,我还将INNER JOIN 更改为LEFT JOIN。如果某些行缺少“水果”值,这很方便。此外,表别名是表名的缩写,使查询更易于编写和阅读。

    【讨论】:

    • t1.name AS n1 我想应该是f1.name AS n1
    • @Sudarshan 。 . .谢谢。
    【解决方案2】:

    错误消息说明了一切(除了您发布的代码中没有card 表或别名)fruit 表和 @ 的三个实例987654323@ 无法区分它们。

    您需要在FROM/JOIN 子句中为它们使用别名,并在查询的其余部分使用别名而不是表名:

    SELECT
      trade.tid,
      trade.first,  fruit1.name AS n1,
      trade.second, fruit2.name AS n2,
      trade.third,  fruit3.name AS n3
    FROM trade 
      INNER JOIN fruit fruit1 ON trade.first  = fruit1.id
      INNER JOIN fruit fruit2 ON trade.second = fruit2.id
      INNER JOIN fruit fruit3 ON trade.third  = fruit3.id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 2016-04-05
      相关资源
      最近更新 更多