2009-03-04 8 views
6

可能であれば、INとLIKEを一緒に使用する方法を見つけようとしています。私が達成したいのは、データのリストをINステートメントにプルアップするサブクエリを置くことです。問題は、ワイルドカードを含むデータのリストです。これを行う方法はありますか?SQLステートメントでINとLIKEを組み合わせる方法はありますか?

私は好奇心が強いです。私は私が私は彼が意味だと思うものを明確にしようと思っZiltoidが尋ねるどのような対処に思わないでくださいいくつかの応答を、見ているので、ノート(サードパーティ経由)

を明確に

Example of data in the 2 tables 

Parent table 

ID Office_Code Employee_Name 
1  GG234   Tom 
2  GG654   Bill 
3  PQ123   Chris 

Second table 

ID Code_Wildcard 
1  GG% 
2  PQ% 

SQLでは、「WHERE col IN (1,2,3)」はおおよそ「WHERE col = 1 OR col = 2 OR col = 3」に相当します。

彼は、正規表現の答えが最も接近するように見える

WHERE col LIKE 'A%' OR col LIKE 'TH%E' OR col LIKE '%C' 

のとほぼ同等となり

WHERE col IN_LIKE ('A%', 'TH%E', '%C') 

として、私は擬似コードよ何かを探しています。残りはマークから離れているようです。

+0

テーブル/レコードのサンプルセットを提供し、希望/希望の出力を与える方法はありますか?それは人々があなたのニーズを満たすことができるクエリを構築するのに役立ちます。 – TheTXI

+0

RDBMSを指定して、人々があなたの質問に対して最適な回答を出すことができるでしょうか?ありがとう。 – Sung

+0

私が使用しているデータの例を追加しました – Ziltoid

答えて

8

どのデータベースを使用しているのかわかりませんが、Oracleでは、IN句で使用するのではなくFROM句でサブクエリのエイリアスを実行することで同等の機能を実現できます。あなたの例を使用する:それは末尾ブランクをしているだけの場合には

select p.* 
from 
    (select code_wildcard 
    from second 
    where id = 1) s 
    join parent p 
     on p.office_code like s.code_wildcard 
+0

それはそれでした。どうもありがとう。 – Ziltoid

2

LIKEステートメントを使用してIDのリストを取得し、INステートメントでそれを使用できます。

しかし、INとLIKEを直接組み合わせることはできません。

3

あなたがsomethignのような意味ですか:本当にこれは以下のように記述する必要があります

select * FROM table where column IN (
    SELECT column from table where column like '%%' 
) 

:あなたがのセットに基づいてレコードを引っ張っする必要がある場合、サブ選択クエリを使用して

SELECT * FROM table where column like '%%' 

は本当に有益ですメインのクエリでは望ましくないロジックです。

何かのように:質問へ

SELECT * FROM TableA WHERE TableA_IdColumn IN 
(
    SELECT TableA_IdColumn FROM TableB WHERE TableA_IDColumn like '%%' 
) 

更新:

あなたはのような文で文を組み合わせることはできません。

あなたがに三つの異なるようなステートメントを行う必要があるでしょうさまざまなワイルドカードを検索します。 MySQL

+0

いいえ。列のデータには実際にワイルドカードが含まれています。 – Ziltoid

+0

外部クエリは何も行いません。 –

+0

ええ、私は答えを更新しています。 – kemiller2002

6

REGEXPを使用します。

Oracleで同じ
WHERE field1 REGEXP('(value1)|(value2)|(value3)') 

WHERE REGEXP_LIKE(field1, '(value1)|(value2)|(value3)') 
+0

私はかっこが必要ではないと思います。 'value1 | value2 | value3'はそうするべきです。あなたがそれらを配置する前に、正規表現の規則に従ってvalue1 .. nをエスケープする必要があることを忘れないでください。 – Tomalak

0

あなたはおそらく、サブクエリのように一部を行うことができますか?

選択*テーブルAからXは、(Bのように「%123パーセント」テーブルBから選択)

+0

それは動作しません。サブクエリのデータには実際にワイルドカードが定義されています。すなわち、列のデータはすでに%123%と表示されています。 – Ziltoid

0

TSQLは、フルテキスト検索対応表についてcontains文を持っているところ。

CONTAINS(Description, '"sea*" OR "bread*"') 
+0

フルテキスト検索が有効なテーブルにはCONTAINSがあります。 – Tomalak

+0

2番目のパラメータにサブクエリを使用できますか? – Ziltoid

+0

あなたはTomalakです。そのZiltoidについてはわかりません。 – dotjoe

2

おそらくこのようなものですか?この例では

SELECT DISTINCT 
    my_column 
FROM 
    My_Table T 
INNER JOIN My_List_Of_Value V ON 
    T.my_column LIKE '%' + V.search_value + '%' 

私は単純化のための値を持つテーブルを使用しましたが、あなたは簡単にサブクエリにそれを変更することができます。大きなリスト(数万のようなもの)をお持ちの場合は、パフォーマンスが悪い可能性があります。

0

私が質問を正しく読んでいる場合は、 "Second"テーブルのCode_Wildcardに一致するOffice_codeを持つすべての親行が必要です。

SELECT * 
FROM parent, second 
WHERE office_code LIKE code_wildcard; 

が、私は何かが欠け午前:オラクルで

は、少なくとも、このクエリがいることを実現しますか?

1
select * 
    from parent 
where exists(select * 
       from second 
       where office_code like trim(code_wildcard)); 

トリムcode_wildcardを。

関連する問題