我正在尝试在join语句中使用like。我的原因是我有一个字段是varchar,而另一个字段也是varchar,但是,第二个字段是逗号分隔的列表。
SELECT c.Class, c.SubClass, c.Value, c.Pairs, c.Description, prodt.ProductType, p.Type
FROM pub.table1 c
INNER JOIN pub.Table2 p ON c.SubClass like CONCAT(CONCAT('%',p.Type),'%')
INNER JOIN pub.Table3 prodt ON p.ProdType = prodt.ProductType
WHERE c.Class = 'whatever'
在这种情况下,p.Type是用逗号分隔的列表,而SubClass是普通的varchar。
我已经尝试使用一些不同的东西。我本以为下面的方法有用,但没有用。
INNER JOIN pub.Table2 p ON c.SubClass like '%' + p.Type +'%'
有没有办法做到这一点,或者我有做其他不同的事情,例如使用SQL92进行另一个选择吗?先感谢您!
答案 0 :(得分:2)
根据您的解释,您需要交换$result = mysqli_query($conn, $sql) or trigger_error(mysqli_error($conn));
,因为LIKE
包含值列表。
p.Type
您的代码:
p.Type like '%' + c.SubClass + '%'
这里是一个样本测试来显示这一点:
SELECT c.Class, c.SubClass, c.Value, c.Pairs, c.Description, prodt.ProductType, p.Type
FROM pub.table1 c
INNER JOIN pub.Table2 p ON p.Type like '%' || c.SubClass || '% '
INNER JOIN pub.Table3 prodt ON p.ProdType = prodt.ProductType
WHERE c.Class = 'whatever'
答案 1 :(得分:1)
我猜您想要这样的东西:
ON ',' || p.type || ',' like '%,' || c.subsclass || ',%'
||
长期以来一直是ISO / ANSI SQL中的字符串连接运算符。老实说,我不记得这个运算符的采用是否可以追溯到26年。