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

10-05 21:26