• 締切済み

SQL文を教えて下さい

2つのテーブルを比較して、片方のテーブルにしかない データを検索したいのですが、どのようなSQL文に なるのか 教えて下さい。 下記の例だと、AテーブルとBテーブルの両方にあるデータ以外のデータを検索したいので、下記の結果になります。よろしくお願いします 期待される結果 003 さああ 004 いいい 005 ううう 例 Aテーブル 001 あいう 002 えおお  003 さああ 004 いいい 005 ううう Bテーブル 001 あいう 002 えおお 

みんなの回答

回答No.9

No8ですが、 > EXCEPT を使用する次のクエリは、EXCEPT オペランドの左辺のクエリから返され、右辺のクエリからは返されなかった、重複しない値が返されます。 なので、これでは不十分だと思います。 逆も必要なので、Unionして select * from Aテーブル except select * from Bテーブル Union select * from Bテーブル except select * from Aテーブル #あ。なるほど。EXCEPTはOracleのMinus互換の命令か…。

すると、全ての回答が全文表示されます。
  • bakock
  • ベストアンサー率0% (0/0)
回答No.8

http://msdn2.microsoft.com/ja-jp/library/ms188055.aspx select * from Aテーブル except select * from Bテーブル;

すると、全ての回答が全文表示されます。
回答No.7

失礼しました。質問文をよく読めていませんでした。 001~005といった値が入った列の名前を、IDとします。 「あいう」といった値が入った列の名前を、STRとします。 前半のSELECT文は、AにありBにないもの、後半の SELECT文では、BにありAにないものを取り出します。 SELECT * FROM A WHERE NOT EXISTS(SELECT * FROM B WHERE ID=A.ID AND STR=B.STR) UNION SELECT * FROM B WHERE NOT EXISTS(SELECT * FROM A WHERE ID=A.ID AND STR=B.STR) IDだけで一意に行を識別できるなら、STR列に対する 条件は不要です。

すると、全ての回答が全文表示されます。
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.6

Bテーブルだけに存在しAテーブルには存在しないデータを、どうやってJOIN/UNIONなしで表示するんでしょうね(笑) サンプルデータでしか動作しないSQL書いてもしょうがない。

すると、全ての回答が全文表示されます。
回答No.5

この質問の回答で、JOINやUNIONが出てくるのが不思議です。 001~005といった値が入った列の名前を、IDとします。 「あいう」といった値が入った列の名前を、STRとします。 SELECT * FROM A WHERE NOT EXISTS(SELECT * FROM B WHERE ID=A.ID AND STR=B.STR) IDだけで一意に行を識別できるなら、STR列に対する 条件は不要です。

すると、全ての回答が全文表示されます。
回答No.4

手元に環境がないので記憶だけで。 確か、minusはSQLSERVERにはなかった記憶があります。 で、多分Full Outer Joinでいけるはずです。 #2,3のSQL文に比べて、多少複雑になりますが、処理は速い…はずです。 Select isNull(A.ID,B.ID) , isNull(A.Name,B.Name) From A FULL OUTER JOIN B On A.ID =B.ID Where A.ID Is Null Or B.ID Is Null ----------- ちなみに Select * From A FULL OUTER JOIN B On A.ID =B.ID を流せばFULL OUTER JOINがどういうものかは分かると思います。(まあBooks Onlineにもサンプルはあるはずなんですが)

すると、全ての回答が全文表示されます。
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.3

ID/文字列の組が、AテーブルでもBテーブルでも同じ(同じIDには必ず同じ文字列が対応する)であれば SELECT ID, STR   FROM A   WHERE ID NOT IN (     SELECT ID FROM B   ) UNION SELECT ID, STR   FROM B   WHERE ID NOT IN (     SELECT ID FROM A   ) で。 同じIDでも対応する文字列が同じとは限らない場合は SELECT ID,STR   FROM A   WHERE NOT EXISTS (     SELECT * FROM B WHERE ID = A.ID AND STR = A.STR   ) UNION SELECT ID,STR   FROM B   WHERE NOT EXISTS (     SELECT * FROM A WHERE ID = B.ID AND STR = B.STR   ) で。 (全角空白でインデントしてあるので、そのままでは実行できません。)

すると、全ての回答が全文表示されます。
  • Kuppycat
  • ベストアンサー率50% (109/216)
回答No.2

select * from A where A.num+A.chr not in (select B.num+B.chr from B where A.num = B.num and A.chr = B.chr) でどうかな。 比べる項目は場合によってはCONCATでそろえたりしてください。

すると、全ての回答が全文表示されます。
回答No.1

同じ型のテーブルならminusが使えるかと思います。 select * from ・・・ minus select * ・・・ (構文がSQLServerで使えるかは調べてないですが。) だめなら、 select num, ss from tableA where num not in (select num from tableB) とか not exists文に直せばいけるかと。

すると、全ての回答が全文表示されます。

関連するQ&A