【问题标题】:How to query in sqlite using like keyword with column name?如何使用带有列名的like关键字在sqlite中查询?
【发布时间】:2021-02-03 05:50:45
【问题描述】:

假设我在 sqlite 数据库中有下表

A1 和 A2 列的表名 A

表名 B,列 B1 和 B2

我想像下面这样查询

SELECT A1 FROM A, B WHERE A.A2 LIKE '%'+B.B2+'%' AND B.B1 = 1

我需要包含 1,4 的 2 行的结果

但它总是返回 0 行。

【问题讨论】:

  • 今日提示:切换到现代、明确的JOIN 语法!更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接!
  • / 分隔的项目一团糟。

标签: sql string sqlite android-sqlite sql-like


【解决方案1】:

SQLite 中的字符串连接运算符是||。您可以将其表达为JOIN

SELECT A1
FROM A JOIN
     B 
     ON A.A2 LIKE '%' || B.B2 || '%' 
WHERE B.B1 = 1;

注意||SQL 标准 字符串连接运算符。 + 在微软拥有的少数数据库中(大部分)过载。

【讨论】:

  • 哇,效果很好。我尝试使用 +、concat 关键字、[] 方括号进行字符串连接。没有任何效果。最后||这行得通。谢谢@戈登
【解决方案2】:

对于这个示例数据,可能有如下条件:

A.A2 LIKE '%' || B.B2 || '%'

会起作用,但一般情况下,条件应包括项目的分隔符'/'

例如,如果您在A 中有一行A2 等于'\aa\bb\',那么如果您搜索'a',上述条件将返回不正确的结果,因为'\aa\bb\' LIKE '%a%'TRUE
您可以查看here 将如何得到错误的结果。

所以你必须使用这个查询:

SELECT DISTINCT A1
FROM A INNER JOIN B 
ON A.A2 LIKE '%/' || B.B2 || '/%' 
WHERE B.B1 = 1;

请参阅demo
结果:

> | A1 |
> | -: |
> |  1 |
> |  4 |

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 2014-08-30
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多