質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

2856閲覧

SQL 同じデータを抽出する方法

ShouOkada

総合スコア46

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2016/04/15 22:48

1と2のテーブルにA,B,Cというカラムがあります。

1と2のA,B,Cのデータが同じかつA,B,Cセットで同じレコードが2行以上あれば取得しない
といったSQLはどうやって書けばいいのでしょうか?

1
A B C
1 A B
2 A B
3 A B
3 A B
3 A C

2
A B C
1 A B
2 A B
3 A B
3 A C

このデータが取得できる。
A B C
1 A B
2 A B
3 A C

あとEXCEPTというのは二つのテーブルの同じデータを抽出すると上司から教わったのですが、調べてみるとどうも意味合いが違うようで納得いっていません。

私の調べた感じでは二つのテーブルの同じデータではなくその逆でAからBと同じデータ引いたBにないものを取得するものだと書いてあります。
上司の言っていることが間違っているのでしょうか?
参考URL ttp://www.sql-reference.com/select/except_minus.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

無難にgroup by とhaving count(1) = 1
の表を内部結合

sql

1select A, B, C 2from ( 3 select A, B, C 4 from TBL1 5 group by A, B, C 6 having count(1) = 1 7 -- A,B,C が同一のグループに分けて 各グループに該当するレコードが1件の場合 8 9) TBL1x 10join ( 11 select A, B, C 12 from TBL2 13 group by A, B, C 14 having count(1) = 1 15 -- A,B,C が同一のグループに分けて 各グループに該当するレコードが1件の場合 16 17) TBL2x ON TBL1x.A = TBL2x.A and TBL1x.B = TBL2x.B and TBL1x.C = TBL2x.C;

投稿2016/04/15 23:24

Ryo

総合スコア507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShouOkada

2016/04/16 02:44

わかりました。ありがとうございますm(__)m
guest

0

ベストアンサー

SQLFiddle の SQL Server2014で確認しました。

sql

1CREATE TABLE _1 ( 2 A int, 3 B varchar(8), 4 C varchar(8) 5); 6 7CREATE TABLE _2 ( 8 A int, 9 B varchar(8), 10 C varchar(8) 11); 12 13INSERT INTO _1 VALUES 14 (1, 'A', 'B'), 15 (2, 'A', 'B'), 16 (3, 'A', 'B'), 17 (3, 'A', 'B'), 18 (3, 'A', 'C'); 19 20 INSERT INTO _2 VALUES 21 (1, 'A', 'B'), 22 (2, 'A', 'B'), 23 (3, 'A', 'B'), 24 (3, 'A', 'C'); 25 26SELECT tmp1.A, tmp1.B, tmp1.C FROM ( 27 SELECT A, B, C, COUNT(*) AS cnt FROM _1 GROUP BY A, B, C 28) AS tmp1 INNER JOIN ( 29 SELECT A, B, C, COUNT(*) AS cnt FROM _2 GROUP BY A, B, C 30) AS tmp2 ON 31 tmp1.A = tmp2.A AND tmp1.B = tmp2.B AND tmp1.C = tmp2.C 32WHERE tmp1.cnt = 1 AND tmp2.cnt = 1;

実行結果

A B C 1 A B 2 A B 3 A C

投稿2016/04/15 23:14

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShouOkada

2016/04/16 02:44

わかりました。ありがとうございますm(__)m
guest

0

例には合ってますけど、ご質問の意図と合ってるかどうか・・

SQL

1SELECT 2T1.A,T1.B,T1.C 3FROM 4T1,T2 5WHERE T1.A=T2.A AND T1.B=T2.B AND T1.C=T2.C 6GROUP BY T1.A,T1.B,T1.C 7HAVING COUNT(*)=1

投稿2016/04/15 23:06

thesecret11

総合スコア234

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShouOkada

2016/04/16 02:44

わかりました。ありがとうございますm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問