我正在建立一个交易网站并拥有这些表格
例子:
第一个是水果。
+----+--------+
| 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 错误还是数据库不应该存储这样的数据?
您需要在表上使用别名。这通常是一个好主意,当您在以下位置多次使用同一个表时,这是必要的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 JOIN将LEFT JOIN. 这在某些行缺少“水果”值的情况下很方便。此外,表别名是表名的缩写,使查询更易于编写和阅读。