我有一个名为Codes
的SQL表,其主列code
的类型为String。
我还有另一个名为Items
的表,其中的列codestring
也是String类型的。此项始终包含一个字符串,其中上表的某些代码用空格分隔。
现在我想获取所有代码及其包含相应代码的项目数。我可以这样做吗?
代码:
code|...
----|---
"A0A"|
"A0B"|
...|
项目:
...|codestring
----|---------
|"A0A C2B F1K"
|"A0C D2S H3K"
|...
输出:
代码:
code|...|noOfItems
----|---|---------
"A0A"|...|5
"A0B"|...|10
...|...|...
答案 0 :(得分:0)
假设所有代码都是不同的(或者至少没有代码是另一个代码的子字符串),则可以使用LIKE运算符: (未试用)
SELECT codes.code, count(*)
FROM codes LEFT JOIN items ON items.codestring LIKE '%' + codes.code + '%'
GROUP BY codes.code;
答案 1 :(得分:0)
您的数据格式太糟糕了,应该修复它。到代码的映射对于每个代码应该有一个单独的行。
如果代码都是三个字符,则L Scott Johnson的答案足够接近。否则,您应该考虑定界符:
SELECT c.code, count(i.codestring)
FROM codes c LEFT JOIN
items i
ON ' ' || i.codestring || ' ' LIKE '% ' || c.code || ' %'
GROUP BY c.code;
请注意该代码的其他修复程序:
||
。count()
将返回0
。