1

以下に示すようなデモデータを含む2つのデータベーステーブルがあります

Create table demo(uuid int, addressname varchar(50));

insert into demo values(1, 'intersportprofi');
insert into demo values(2, 'intersportprofi');
insert into demo values(3, 'intersportprofi');
insert into demo values(4, 'intersportmarket');
insert into demo values(5, 'intersportmarket');
insert into demo values(6, 'intersportmarket');

create table demo_av(uuid int, testid int, name varchar(50), value varchar(50));

insert into demo_av values(1, 1, 'sport','football basketball cricket');
insert into demo_av values(2, 1, 'brand','reebok  addidas nike');
insert into demo_av values(3, 2, 'sport','football basketball ');
insert into demo_av values(4, 2, 'brand','reebok  addidas ');

これらのテーブルから結果を取得するために次のクエリを作成しましたが、オラクルは空の結果セットを返します。

SELECT  d.addressname  FROM demo d, demo_av dv
WHERE  d.uuid = dv.testid  AND d.addressname='intersportprofi' 
AND REGEXP_LIKE( dv.value, 'reebok') AND REGEXP_LIKE( dv.value, 'cricket') 

なんで?私はどこで間違っていますか?どんな助けでも大いに感謝します

4

2 に答える 2

5

これを変える:

AND REGEXP_LIKE( dv.value, 'reebok') AND REGEXP_LIKE( dv.value, 'cricket') 

これに:

AND (REGEXP_LIKE( dv.value, 'reebok') OR REGEXP_LIKE( dv.value, 'cricket'))

なぜなら:

AND"demo_av"に一致するレコードがテーブルにありません。必要な演算子は です。最初の条件が存在するため、括弧が必要です。"reebok" "cricket""OR"

アップデート

結果のキャプチャ画面は次のとおりです。

ここに画像の説明を入力

乾杯

于 2012-11-12T17:28:39.567 に答える
3

あなたのコメントに基づいて、同じで複数の行を検索するクエリが必要だと思いますtestid。これは、結合を使用するか、次のように実行できます。

SELECT DISTINCT d.addressname  
FROM demo AS d
WHERE d.addressname = 'intersportprofi' 
  AND EXISTS
      ( SELECT *
        FROM demo_av AS dv
        WHERE d.uuid = dv.testid 
          AND dv.value LIKE '%reebok%'
      )
  AND EXISTS
      ( SELECT *
        FROM demo_av AS dv
        WHERE d.uuid = dv.testid 
          AND dv.value LIKE '%cricket%'
      ) ;
于 2012-11-12T19:10:51.843 に答える