4

まったく同じ列のテーブルが2つあります

表A

idフラグ
1 Y
2 Y
3 N
4 N

表B

idフラグ
1 Y
2
3 N
4

表Aのすべての行を表示するselectクエリをOracleで記述したいと思います。このFLAG列は、表Bと同じではありませんが、IDの列が一致しています。

結果は次のようになります。

idフラグ
2 Y
4 N
4

7 に答える 7

3

「テーブルAのすべての行...IDの列が一致するテーブルBとして」:

FROM a JOIN b USING (id)

「FLAG列が同じでない場合」:

WHERE a.flag != b.flag 
   OR (a.flag IS NULL AND b.flag IS NOT NULL)
   OR (b.flag IS NULL AND a.flag IS NOT NULL)

したがって、クエリは次のようになります

SELECT id, a.flag
  FROM a JOIN b USING (id)
WHERE a.flag != b.flag 
   OR (a.flag IS NULL AND b.flag IS NOT NULL)
   OR (b.flag IS NULL AND a.flag IS NOT NULL)

-WHERE条件は醜いですが、テーブルbに-valueがあるNULLが、ない場合、またはその逆の場合をキャッチするために必要です。

于 2012-12-17T15:34:34.187 に答える
2

これはオーラルで機能します。列にnullがあるため、直接比較できないため、NVL()または同等の関数を使用する必要があります。

select a1.* from table_a a1,table_b b 
where A1.id=B.id
and nvl(a1.flag,'y')<>nvl(b.flag,'y')

このsqlfiddleを参照してください:http ://sqlfiddle.com/#!4 / 241de / 1

于 2012-12-17T18:50:18.377 に答える
1

これでうまくいく、

    select Table_A.id,Table_A.FLAG from 
Table_A join Table_b on Table_A.id=Table_b.id 
where Table_A.FLAG!=Table_b.FLAG 
or (Table_b.FLAG is null and table_a.flag is not null);

sqlfiddle

于 2012-12-17T15:35:29.443 に答える
0
  1. 行が表BではなくテーブルAにある場合はどうなりますか?それでも表示しますか?これは、内部結合を実行するか外部結合を実行するかを決定するのに役立ちます。

その場合、を使用して詳細を取得できます。

select a.id, a.flag, b.flag
  from table_a a,
       table_b b
  where a.id = b.id(+)

フラグが等しくない行が必要なので。

select a.id, a.flag, b.flag
  from table_a a,
       table_b b
  where a.id = b.id(+)
    and a.flag <> b.flag

また、フラグがnullになる可能性があるかどうかを確認します。その場合、クエリを少し変更する必要があります。

于 2012-12-17T15:30:10.990 に答える
0
SELECT  a.*
FROM    tableA a
        LEFT JOIN tableB b
            ON a.id = b.ID AND
                a.FLAG = b.FLAG
WHERE   b.ID IS NULL
于 2012-12-17T15:31:36.497 に答える
0

どうですか

    SELECT * 
    FROM TABLEA 
      INNER JOIN TABLEB
      ON TABLEA.ID = TABLEB.ID
    WHERE TABLEA.Flag != TABLEB.FLAG
       OR TABLEB.FLAG IS NULL

デモ

于 2012-12-17T15:28:25.110 に答える
0

あなたが冗談を言っているように私には思えました:)そのような場合、Oracleには特別なMINUS演算子があります。 証明リンク

したがって、答えは非常に短く単純です

select id, flag from a
minus
select id, flag from b

SQLFiddle

PS申し訳ありません-または、テーブルBに対応するIDのレコードが必要ですか?次に、以下を参照してください

select id, flag from a where id in (select id from b)
minus
select id, flag from b

SQLFiddle

于 2012-12-18T13:25:39.070 に答える