将DISTINCT与FIND_IN_SET一起使用

时间:2016-10-07 05:13:46

标签: mysql select distinct find-in-set

我想同时选择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

1 个答案:

答案 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

在原始查询中,正在进行交叉连接。这将生成两个表的记录之间的所有可能组合。使用交叉连接很难得到正确答案,因此最好使用左连接。

在这里演示:

SQLFiddle