2

2 番目の結合テーブルに複数の条件が含まれる SQL 結合について質問があります。以下はテーブルの詳細です

表1

pId ステータス keyVal
---- ------- ------ 
100 1 45 
101 1 46 

表 2

pId モード modeVal
100 2 5
100 3 6
101 2 7
101 3 8

上記の 2 つのテーブルがあり、以下の条件に基づいて参加して pId を取得しようとしています

keyVal = 45 および status = 1 を持つ pId は、mode = 2 および modeVal 5 および mode =3 および modeVal = 6 を持つ table2 と結合されます

私が期待している結果は pid = 100 を返すことです

結合クエリについて教えてください。

4

3 に答える 3

1

1 つの方法は、 with を使用GROUP BYHAVINGて、見つかった行数が 2 であり、そのうち 2 行が条件に一致していることをカウントすることです。

WITH cte AS (SELECT DISTINCT * FROM Table2)
SELECT t1."pId" 
FROM Table1 t1 JOIN cte t2 ON t1."pId" = t2."pId"
WHERE t1."status" = 1 AND t1."keyVal" = 45
GROUP BY t1."pId"
HAVING SUM(
  CASE WHEN t2."mode"=2 AND t2."modeVal"=5 OR t2."mode"=3 AND t2."modeVal"=6 
       THEN 1 END) = 2 AND COUNT(*)=2

t2 の値が既に異なる場合は、単に削除しcteて Table2 から直接選択できます。

でテストする SQLfiddle

于 2013-08-29T08:08:45.977 に答える
0
SELECT columns
FROM table1 a, table2 B
WHERE a.pid = B.pid
    AND a.keyval = 45
    AND a.status = 1
    AND (
        (B.mode = 2 AND B.modeval = 5)
        OR 
        (B.mode = 3 AND B.modeval = 6)
    )
于 2013-08-29T05:54:05.537 に答える
0

以下のクエリは完全に機能するはずです

select distinct table1.pid FROM table1 JOIN table2 
on table1.pid = table2.pid 
WHERE table2.modeValue IN (5,6) AND table2.mode IN (2,3) AND table1.keyVal=45 and table1.status=1;
于 2013-08-29T06:01:52.977 に答える