使用distinct和find\ in\ u set

wydwbb8l  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(429)

如果p.ptype不在c.ptype的集合中,我想选择distinct(p.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
qc6wkl3g

qc6wkl3g1#

试着做一个明确的 LEFT JOINptypep 表出现在 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公司

相关问题