3

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

1 回答 1

2

尝试对表中 CSV 列表中存在的表执行LEFT JOIN显式ptype操作:pc

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

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

演示在这里:

SQLFiddle

于 2016-10-07T05:19:32.057 回答