如何连接两次相同的列?

时间:2016-01-16 19:40:28

标签: mysql sql join inner-join

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

示例:

第一个是水果。

+----+--------+
| 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是错的还是数据库不应该存储这样的数据?

2 个答案:

答案 0 :(得分:3)

您需要在表上使用别名。这通常是一个好主意,当您在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。这很方便,以防一些行丢失"水果"值。此外,表别名是表名的缩写,使查询更容易编写和读取。

答案 1 :(得分:1)

错误消息显示全部(除了您发布的代码中没有card表或别名的事实):{{1}有三个实例} table和fruit无法区分它们。

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

JOIN