2016-10-15 62 views
0

我有以下MySQL表(images):SQL組未正常工作

+----+------------+-----------------------+ 
| id | gallery_id | path                         | 
+----+------------+-----------------------+ 
| 58 |  NULL | 58.jpg 
| 59 |  NULL | 59.jpg 
| 66 |   9 | 9-001.jpg 
| 67 |   9 | 9-002.jpg 
| 68 |   10 | 10-001.jpg 
| 69 |   10 | 10-002.jpg 
... 

我想gallery_id,如果它不爲空,選擇行,其中gallery_id爲空或組吧。 所以,預期的結果是:

+----+------------+-----------------------+ 
| id | gallery_id | path                         | 
+----+------------+-----------------------+ 
| 58 |  NULL | 58.jpg 
| 59 |  NULL | 59.jpg 
| 66 |   9 | 9-001.jpg 
| 68 |   10 | 10-001.jpg 
... 

我試圖用​​3210函數來實現這一結果:

select * from `images` group by coalesce(gallery_id, id); 

但它只返回行,其中gallery_id爲空。 請告訴我,我做錯了什麼?提前致謝。

+0

您的查詢正常工作。 http://sqlfiddle.com/#!9/e85a45/1 – Mike

回答

0

你的要求沒有意義。 GROUP BYSELECT *是不合情理的,因爲目前還不清楚大部分列值來自哪裏。

您似乎想要確定優先級。 。 。每個NULL一行,然後每個畫廊一個。

我建議:

select i.* 
from images i 
where i.gallery_id is null or 
     i.id in (select min(i2.id) from images i2 group by i2.gallery_id); 

作爲獎勵,這是標準的SQL,應該在任何數據庫。

0

與子查詢和組時,您可以使用一個由

select * from `images` 
where (gallery_id, id) in (select gallery_id, min(id) 
          from `images` 
          where gallery_id is not null 
          group by gallery_id) 
0
SELECT * FROM `images` where gallery_id is not null group by gallery_id 
UNION 
SELECT * FROM `images` where gallery_id is null