1

「列」に選択ステートメントの結果で見つかったテキストが含まれているテーブルのすべてのエントリを返すように SQLite に依頼する方法がわかりません。

これが理にかなっている場合、私はそれがこのように少し動作することを望みます:

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

どんな助けでも大歓迎です。もっと情報が必要な人がいたら教えてください。

編集: 申し訳ありませんが、フォーマットを編集して読みやすくし、以下に詳細を追加しました。この質問を編集するだけで、ばかげて読めないコメントも削除しました。

table1 (アラート) には、文字列を格納する「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 の "lookup_info" 列のどこかに、table2 の "name" 列の下にある table2 (デバイス) に格納されているコンピューター名が含まれていないtable1 (アラート) のすべてのエントリを返すことです。

基本的に、存在しないコンピューター名を参照するアラートがいくつかあります。それらのアラートが必要です。

ありがとうございました。

編集: アラート テーブル内のすべてのエントリの lookup_info 列を含む、alerts_fts という名前の fts3 テーブルを作成しました。今回は全文検索で再度検索してみます。これは私が使用しているクエリです:

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

In で Like を使用することはできませんが、いずれかの列を逆に一致させたい場合は、次のようにすることができます。

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

SQL フィドルのデモ

于 2013-02-25T19:48:39.040 に答える