
こんばんわ。ORACLEで、
A
平成 番号 種別 ...
21 12 1 ...
21 12 2 ...
22 13 3 ...
21 13 1 ...
B
平成 番号 種別
21 12 1 ...
21 12 5 ...
22 13 5 ...
というテーブルがあります。
ここから、平成は21(例えば)という条件で、Aにはあって、Bにはない。もしくは、BにはあってAにはないレコードを検索したいです。
結果は、下記となります。
平成 番号 種別 テーブル名
21 12 2 TABLE A
21 13 1 TABLE A
21 13 5 TABLE B
色々考えたのですがよい方法がわかりませんでした。
効率のよいSQLはありますでしょうか? レコードはA,Bそれぞれ数万件です。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
ORACLEなら、MINUSとUNIONの併用でしょうか・・・
MINUS=差集合を求める
(SELECT 平成,番号,種別,'TABLE A' FROM A
MINUS
SELECT 平成,番号,種別,'TABLE A' FROM B)
UNION
(SELECT 平成,番号,種別,'TABLE B' FROM B
MINUS
SELECT 平成,番号,種別,'TABLE B' FROM A)
このSQLが、ORACLEなら通るはず。(手元にないので未確認)
INTERSECTで積集合が取れるので、
和集合(UNION) -(MINUS) 積集合(INTERSECT)
という方法もありですね。
効率面で言えば、EXISTSよりは速かったはずです。
No.4
- 回答日時:
with x as(
select a.*,'TABLE A' as tab from a
union all
select b.*,'TABLE B' from b
)
select x.heisei,x.bangou,x.syubetu
from x
where x.heisei = 21
group by x.heisei,x.bangou,x.syubetu
having count(*) = 1
;
No.3
- 回答日時:
with x as(
select a.*,'TABLE A' as tab from a
union all
select b.*,'TABLE B' from b
),y as(
select x.*,count(*)over(partition by heisei,bangou,syurui) as cnt from x
)
select heisei,bangou,syurui,tab from y where cnt = 1 and heisei = 21
No.1
- 回答日時:
「[平成]カラムが21で、全カラムが同じ値のレコードが他のテーブルに無いレコードを検索する」ということでしょうか?
そうだとすると、下記の様になると思うのですが・・・。(最後の行の番号が12)
-----------------------------------
平成 番号 種別 テーブル名
21 12 2 TABLE A
21 13 1 TABLE A
21 12 5 TABLE B
-----------------------------------
上記のような条件だとすると、EXISTS句とUNIONを使えばできると思います。
例) ---------------------------------------------------------------
SELECT
*, 'TABLE A' AS テーブル名
FROM A
WHERE
heisei = 21 AND
NOT EXISTS (
SELECT 'X' FROM B
WHERE A.heisei = B.heisei AND A.num = B.num AND A.kind = B.kind
)
UNION
SELECT
*, 'TABLE B' AS テーブル名
FROM B
WHERE
heisei = 21 AND
NOT EXISTS (
SELECT 'X' FROM A
WHERE A.heisei = B.heisei AND A.num = B.num AND A.kind = B.kind
)
;
-------------------------------------------------------------------
なお、手元にOracleは無いので試してはいません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL MySQLのテーブル作成で 自信がありません。 2 2022/08/28 05:35
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
SELECTの結果で同一行を複数回...
-
select insertで複数テーブルか...
-
MERGE文を単体テーブルに対して...
-
select句副問い合わせ 値の個...
-
unionの結果は集計はできないで...
-
unionでマージした副問合せを結合
-
結合と副問い合わせの違い
-
複数テーブルのMAX値の行データ...
-
他のテーブルを参照した値はupd...
-
SQL GROUPで件数の一番多いレコ...
-
件数を取得する方法
-
外部結合とor条件混在の記述方法
-
固定値を含む結合と複数テーブ...
-
oracleの分割delete
-
DELETE 文とEXISTSの使い方につ...
-
Oracleでの文字列連結サイズの上限
-
OracleのSQL*PLUSで、デー...
-
DataGridViewの、選択されてい...
-
Accessで別テーブルの値をフォ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select insertで複数テーブルか...
-
select句副問い合わせ 値の個...
-
SELECTの結果で同一行を複数回...
-
MERGE文を単体テーブルに対して...
-
固定値を含む結合と複数テーブ...
-
oracleの分割delete
-
SQL GROUPで件数の一番多いレコ...
-
外部結合とor条件混在の記述方法
-
複数テーブルのMAX値の行データ...
-
unionの結果は集計はできないで...
-
unionでマージした副問合せを結合
-
他のテーブルを参照した値はupd...
-
SET句内で複数の条件を指定して...
-
結合と副問い合わせの違い
-
集計後の数値が倍になる
-
SQLの書き方(チェックボックス)
-
DELETE 文とEXISTSの使い方につ...
-
マテビューのNOTNULL設定について
-
異なるテーブルのレコード削除
おすすめ情報