2017-11-08 9 views
0

LIKE演算子を文字列検索に使用するには、どのように文字列が別のselect文の出力として出力されますか?私たちはそのための入力として選択クエリを持つ演算子を持つことができますか?

SELECT CONCAT('"id":"',transactions.Id,'"') AS id 
FROM transactions.transactions LEFT JOIN 
report.PlayerTransaction 
ON (transactions.Id=PlayerTransaction.TranId) 
WHERE TranId IS NULL AND transactions.created_at > '2017-10-15' ; 

SELECT * 
FROM report.EtlServiceErrorLog 
WHERE Topic = 'player' and ErrorSourceData like xxxx and 
CreatedDate > '2017-10-15' ; 

これらの2つのクエリを考慮します。クエリを次のように記述したいとします。

SELECT * 
FROM report.EtlServiceErrorLog 
WHERE Topic = 'player' and 
     ErrorSourceData like in (SELECT CONCAT('"id":"', transactions.Id, '"') AS id 
           FROM transactions.transactions LEFT JOIN 
            report.PlayerTransaction 
            ON (transactions.Id = PlayerTransaction.TranId) WHERE TranId IS NULL AND transactions.created_at > '2017-10-15' 
          ;) and 
     CreatedDate > '2017-10-15' ; 

またはループするための助けが必要ですか?私に例を教えてください。

+0

'LIKE'が、私は' CONCAT(でワイルドカードを見ないのはなぜ。。? ' "ID": "'、transactions.Idを、 '' ') '。LIKE'パターンマッチングのためのものである。 'col LIKE 'ABC%''。 'col LIKE 'ABC'は比較ではほとんど意味がなく、' col = 'ABC'と書く方がよいでしょう。 –

+0

ErrorSourceDataには文字列として格納された巨大なjsonデータが含まれています。それはそこで使用されているような理由です –

答えて

0

サブクエリが1行だけ返されても機能します。

+0

sub querry does not return 1 row..itは多くの行を返すので、私のような演算子ですべてをチェックしてほしい –

0

uがCONCAT( ' "ID" SELECT(中 ErrorSourceData INにLIKE演算子 '%' _変更を使用いけない場合:

1

は、あなたが本当にしたいようだ "'、transactions.Idを、 '"')これはINで行うことができない

ErrorSourceData LIKE CONCAT('%"id":"', t.Id, '"%') 

を探してあなたがEXISTSが必要

SELECT * 
FROM report.EtlServiceErrorLog sel 
WHERE Topic = 'player' 
AND EXISTS 
(
    SELECT * 
    FROM transactions.transactions t 
    WHERE t.id NOT IN (SELECT pt.TranId FROM report.PlayerTransaction pt) 
    AND t.created_at > '2017-10-15' 
    AND sel.ErrorSourceData LIKE CONCAT('%"id":"', t.Id, '"%') 
) 
AND CreatedDate > '2017-10-15' ; 
+0

探していたが、1時間実行してもクエリは結果を返さない!!! –

+0

このクエリが、結果セットを制限することによって、つまり '(1,2,3,4,5)'に 'とsel.report_idのような条件を追加することで、このクエリが必要なものかどうかを確認できます。結果が良い場合は、速度だけが問題になります。しかし、複数の '%like something% ''では、これを高速化するのは難しいです。すべてのEtlServiceErrorLogレコードに ''% "id": "''が含まれていますか?そうでなければ、この条件と '%" id ":"% "'のようなsel.ErrorSourceDataを追加して、 'transactions(created_at、id)'のインデックスが役に立つはずです。 (私はあなたがIDに外部キーの制約を持っていることは当然だと思っています。) –

関連する問題