mysql - 如何加入同一列两次?

标签 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 错误还是数据库不应该像这样存储数据?

最佳答案

您需要在表上使用别名。这通常是个好主意,当您在 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。如果某些行缺少“水果”值,这很方便。此外,表别名是表名的缩写,使查询更易于编写和阅读。

关于mysql - 如何加入同一列两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34831277/

相关文章:

javascript - 加载时间付款方式一页结帐很长

sql - Oracle从表中选择第N行

mysql - 产品价格提高10%

SQL将float转换为带小数的逗号varchar

sql - 如何在jsp Restful Web服务中进行连接查询?

php - Php Phalcon 中的模型层次结构 - 访问子模型时找不到父模型的属性

MySQL NDB 事件 - 监听对特定行的更改

php - 连接 2 个表以查询缺失的条目

json - 如何从Grails中的JSON列表生成JSON

mysql - Sonarqube 服务未启动