如何两次加入同一列?

9 mysql sql join inner-join

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

例子:

第一个是水果。

+----+--------+
| ID |  Name  |
+----+--------+
|  1 | Apple  |
|  2 | Orange |
|  3 | Banana |
+----+--------+
Run Code Online (Sandbox Code Playgroud)

第二个是交易

+-----+-------+--------+-------+
| tID | first | second | third |
+-----+-------+--------+-------+
|   1 |     2 |      1 |     3 |
|   2 |     3 |      1 |     2 |
+-----+-------+--------+-------+
Run Code Online (Sandbox Code Playgroud)

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

+-----+-------+--------+--------+-------+-------+--------+
| tID | first |   n1   | second |  n2   | third |   n3   |
+-----+-------+--------+--------+-------+-------+--------+
|   1 |     2 | Orange |      1 | Apple |     3 | Banana |
|   2 |     3 | Banana |      1 | Apple |     2 | Orange |
+-----+-------+--------+--------+-------+-------+--------+
Run Code Online (Sandbox Code Playgroud)

这是我的 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
Run Code Online (Sandbox Code Playgroud)

我得到的回应是

Error Code: 1066. Not unique table/alias: 'card'
Run Code Online (Sandbox Code Playgroud)

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

Gor*_*off 9

您需要在表上使用别名。这通常是一个好主意,当您在以下位置多次使用同一个表时,这是必要的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;
Run Code Online (Sandbox Code Playgroud)

请注意,我也INNER JOINLEFT JOIN. 这在某些行缺少“水果”值的情况下很方便。此外,表别名是表名的缩写,使查询更易于编写和阅读。