实施例
+------------+
| Fruits |
+------------+
| Apple |
| Banana |
| |
+------------+
+------------+
| Color |
+------------+
| Red |
| Green |
| Yellow |
+------------+
然后我选择加入子查询,得到如下结果:
+-----------------------+
| Fruits_Color |
+-----------------------+
| Apple | Red |
| Apple | Green |
| Banana | Yellow |
+------------+----------+
但是我期待这样的结果:
+-----------------------+
| Table Fruits_Color |
+-----------------------+
| Apple | Red |
| | Green |
| Banana | Yellow |
+------------+----------+
我的查询:
SELECT fruits_name, color_name
FROM fruits f
LEFT JOIN (SELECT * FROM color) c ON c.id = f.color_id;
有人可以帮助我吗?
答案 0 :(得分:3)
JOIN不按您想要的方式工作。如果存在匹配,则查询将返回每个匹配元组的每一列,即使其值为"重复" (与前一行的值相同)。无论如何,由于SQL不关心显示结果,因此无关紧要,它关注的是检索数据。
如果您不想显示"重复"值,您可以在您的应用程序中自由处理;在你的情况下,它只是MySQL客户端不做任何特殊处理,因此它显示每列的每个值。
答案 1 :(得分:1)
而不是留下空白,正常'在mysql中处理这个问题的方法是为每个水果/颜色组合返回一行,其中GROUP BY和GROUP_CONCAT()用于颜色。 e.g。
select f.name, group_concat(c.colour)
from fruits f join fruit_colours fc on (f.id = fc.fid)
join colours c on (c.id = fc.cid)
group by f.name;
+--------+------------------------+
| name | group_concat(c.colour) |
+--------+------------------------+
| apple | red,green |
| banana | yellow |
+--------+------------------------+