我正在建立一个交易网站并拥有这些表格
示例:
第一个是水果。
+----+--------+
| 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是错的还是数据库不应该存储这样的数据?
答案 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