问题描述
具有列A1和A2的表名A
具有列B1和B2的表名B
我想查询如下
SELECT A1 FROM A,B WHERE A.A2 LIKE '%'+B.B2+'%' AND B.B1 = 1
我需要2行的结果包含1,4
但是总是返回0行。
解决方法
SQLite中的字符串连接运算符为||
。您可以将其表示为JOIN
:
SELECT A1
FROM A JOIN
B
ON A.A2 LIKE '%' || B.B2 || '%'
WHERE B.B1 = 1;
请注意,||
是 SQL标准字符串连接运算符。 +
仅在Microsoft拥有的少数几个数据库(大部分)中超载。
对于此样本数据,可能出现以下情况:
A.A2 LIKE '%' || B.B2 || '%'
将起作用,但通常条件应包括项目的分隔符'/'
。
例如,如果您在A
中有一行,其中A2
等于'\aa\bb\'
,那么如果您搜索'a'
,则上述条件将返回错误的结果,因为{{ 1}}是'\aa\bb\' LIKE '%a%'
。
您可以检查here怎么会得到错误的结果。
因此您必须使用以下查询:
TRUE
请参见demo。
结果:
SELECT DISTINCT A1
FROM A INNER JOIN B
ON A.A2 LIKE '%/' || B.B2 || '/%'
WHERE B.B1 = 1;