2016-10-07 163 views
1

我想在同一時間我也想獲得c.category選擇DISTINCT(p.ptype)如果p.ptype不在集c.ptype使用DISTINCT與FIND_IN_SET

數據庫表:p

id ptype 
1 Shirts 
2 Cups 
3 Shirts 
4 Mugs 

數據庫表格:C

id category ptype 
1 Test  Pants, Shirts, TShirts 
2 Test1  Cups, Mats, Rugs 

我嘗試的SQL命令如下

SELECT DISTINCT(p.ptype), IF(FIND_IN_SET(p.ptype, c.ptype), c.category,'') as category 
FROM p, c 

這輸出設置兩次的p.ptype。一次使用空的c.category字段,另一次使用填充的c.category。

但是期望的輸出如下

ptype category 
Shirts Test 
Cups  Test1 
Mugs 

回答

2

嘗試存在於CSV列表中c表上ptype做一個明確的LEFT JOINp表:

SELECT DISTINCT p.ptype, COALESCE(c.category, '') AS category 
FROM p 
LEFT JOIN c 
    ON FIND_IN_SET(p.ptype, c.ptype) > 0 

在你原來的查詢,正在做一個交叉連接。這會在兩個表的記錄之間生成所有可能的組合。使用交叉連接很難得到正確的答案,所以左連接更可取。

演示在這裏:

SQLFiddle