簡體   English   中英

左連接但左表不顯示相同的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM