我想同时选择DISTINCT(p.ptype)我也想获取c.category,如果p.ptype不在c.ptype的集合中
数据库表: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
答案 0 :(得分:2)
尝试在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
在原始查询中,正在进行交叉连接。这将生成两个表的记录之间的所有可能组合。使用交叉连接很难得到正确答案,因此最好使用左连接。
在这里演示: