我想同时选择DISTINCT(p.ptype)如果p.ptype不在c.ptype的集合中,我还想得到c.category
数据库表: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
最佳答案
尝试对LEFT JOIN
表中CSV列表中的ptype
表中的p
执行显式c
:
SELECT DISTINCT p.ptype, COALESCE(c.category, '') AS category
FROM p
LEFT JOIN c
ON FIND_IN_SET(p.ptype, c.ptype) > 0
在最初的查询中,正在进行交叉连接。这将在两个表的记录之间生成所有可能的组合。使用交叉连接很难得到正确的答案,所以最好使用左连接。
演示:
SQLFiddle