1

我无法弄清楚如何要求 SQLite 返回表中的所有条目,其中“列”包含在 select 语句的结果中找到的文本。

我希望它像这样工作,如果这有任何意义:

select * from table1`
where ("%" || (column) || "%") like in
("%" || (select different_column from table2) || "%")`

任何帮助将非常感激。如果有人需要更多信息,请告诉我。

编辑:抱歉,我已将格式编辑为更具可读性,并在下面添加了更多细节。我还删除了我荒谬的难以理解的评论,而只支持编辑这个问题。

table1 (alerts) 包含一个名为“lookup_info”的列,其中存储了一个字符串。该字符串通常如下所示:

--- 
:account_description: Administrator 
:alertable_class: Computer 
:alertable_name: exampledotnet 
:network_account_type: 
:wmi:
:user: exampledomain\administrator 

table2 (devices) 包含一个名为“name”的列,其中存储了一个字符串。该字符串通常如下所示:

so-ws-rm101

我想要做的是返回 table1(警报)中的所有条目,其中 table1 的“lookup_info”列不包含存储在 table2 的“名称”列下的 table2(设备)中的计算机名称。

基本上,有一些警报引用了不再存在的计算机名称。我想要那些警报。

谢谢你。

编辑:我创建了一个名为 alerts_fts 的 fts3 表,其中包含 alerts 表中所有条目的 lookup_info 列。这次我再次尝试使用全文搜索进行搜索。这是我正在使用的查询:

select *
  from alerts_fts 
  where alerts_fts.lookup_info match ( select group_concat(name, " OR ") 
                         from Devices
                         group by "x")

这应该使查询看起来像:

select *
  from alerts_fts 
  where alerts_fts.lookup_info match (cw-ws-example OR so-p2-132-example OR 
                         ... OR so-p4-lastexample)
                         group by "x")

自然,这仍然行不通。查询不返回任何内容。我究竟做错了什么?

4

2 回答 2

2

我认为你需要通过加入来做到这一点:

select t1.**
from table1 t1 join
     table2 t2
     on t1.column like '%'||t2.column||'%'

如果有可能不止一场比赛,您需要添加distinct

select distinct t1.*
. . .

也许这就是你需要的:

select t1.**
from table1 t1 join
     table2 t2
     on t1.column like '%'||t2.columnA||'%' or
        t1.column like '%'||t2.columnB||'%' or 
        t1.column like '%'||t2.columnC||'%' or 
        . . .

根据您的编辑,我认为您需要左外连接,然后检查不匹配:

select table1.*
from table1 left outer join
     table2
     on t1.column like '%'||t2.column||'%'
where t2.column is null
于 2013-02-25T19:44:38.997 回答
1

您不能将 Like 与 In 一起使用,但您可以执行以下操作,假设您想要匹配任一列:

Select Distinct table1.* 
From table1 
  Join table2 On 
    column1 like '%'||different_column||'%' 
    Or different_column like '%'||column1||'%'

SQL 小提琴演示

于 2013-02-25T19:48:39.040 回答