[英]Left Join but so that left table don't show same data
例子
+------------+
| Fruits |
+------------+
| Apple |
| Banana |
| |
+------------+
+------------+
| Color |
+------------+
| Red |
| Green |
| Yellow |
+------------+
然后我選擇了 join 子查詢,得到這樣的結果:
+-----------------------+
| 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;
有沒有人可以幫助我?
JOIN 不能按您想要的方式工作。 如果有匹配項,查詢將返回每個匹配元組的每一列,即使它的值是“重復的”(與前一行的值相同)。 無論如何,這無關緊要,因為 SQL 不關心顯示結果,它關心檢索數據。
如果您不想顯示“重復”值,您可以在應用程序中自由處理; 在您的情況下,只是 MySQL 客戶端不進行任何特殊處理,因此它顯示了每列的每個值。
mysql 中對此的“正常”方法不是留空,而是為每個水果/顏色組合返回一行,並為顏色使用 GROUP BY 和 GROUP_CONCAT()。 例如
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 |
+--------+------------------------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.