No.3ベストアンサー
- 回答日時:
>検索結果はAテーブルに存在しているが、BテーブルまたはCテーブルには存在していないデータ。
というのは、
・BとCのどちらかに存在していれば検索対象外
・BとCの両方に存在していれば検索対象外
の2つの意味に取れますよね。
前者なら
SELECT * FROM テーブルA
WHERE (NOT EXISTS(SELECT * FROM Bテーブル
WHERE Bテーブル.CODE=Aテーブル.CODE AND Bテーブル.NAME=Aテーブル.NAME)
AND NOT EXISTS(SELECT * FROM Cテーブル
WHERE Cテーブル.CODE=Aテーブル.CODE AND Cテーブル.NAME=Aテーブル.NAME))
後者なら
SELECT * FROM テーブルA
WHERE (NOT EXISTS(SELECT * FROM Bテーブル
WHERE Bテーブル.CODE=Aテーブル.CODE AND Bテーブル.NAME=Aテーブル.NAME)
OR NOT EXISTS(SELECT * FROM Cテーブル
WHERE Cテーブル.CODE=Aテーブル.CODE AND Cテーブル.NAME=Aテーブル.NAME))
でしょうか。
No.2
- 回答日時:
仮にCODEがNULL不許可だとします。
SELECT A.* FROM Aテーブル A
LEFT JOIN Bテーブル B ON A.CODE=B.CODE
LEFT JOIN Cテーブル C ON A.CODE=C.CODE
WHRE B.CODE IS NULL OR C.CODE IS NULL
最後のWHERE句は「Bに無いか、Cに無い」です。
もし、「B、Cともに無い」ならば条件式をAND結合
にするか、サブクエリを使う下記の書式があります。
SELECT X.* FROM
(SELECT A.* FROM Aテーブル A
LEFT JOIN Bテーブル B ON A.CODE=B.CODE
WHERE B.CODE IS NULL) X
LEFT JOIN Cテーブル C ON X.CODE=C.CODE
WHERE C.CODE IS NULL
サブクエリを使う方が速度が速いはずです。特に
元のデータが多く、対象データが少ない場合には
効果が大きくなります。これはCテーブルと結合
させる時点で、レコードが絞り込まれているから
です。
上記はANSI形式なので、他のDBシステムでも
使えるSQL文です。(Oracle固有の式は無い)
但し、バージョンによりANSI形式が使えないことが
あります。バージョンを記載するとよいでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Oracle SQL update方法 2 2022/06/22 14:07
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- MySQL SELECT my_items.item_name, carts.count カンマ, の意味? 2 2023/01/23 07:12
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracleのview、synonymをCOMPIL...
-
PLSQLのバインド変数の件です。
-
oracle 複数列を1列にまとめる
-
テーブル名をカラムとして取得...
-
男性と2人で飲食店に行きテーブ...
-
アクセス レコードセットを更...
-
オーダーの覚え方について
-
DBのテーブルの設計ができず困...
-
会社の飲み会の幹事になり、座...
-
一つ前に戻るには…
-
外部キーだけのテーブル(主キ...
-
処理の途中で停止させ、再開さ...
-
MACアドレス見えない
-
ACCESSで容量が50MBになった...
-
ACCESS での LEFT JOIN 時の WH...
-
テーブルにcsvファイルをインポ...
-
mysqlのフィールド名
-
ビューのソートについて
-
「テーブルに座って……」という...
-
取数計算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブル名をカラムとして取得...
-
update文で改行を入れる
-
SQL、2つのテーブルで条件一致...
-
ROWNUMでUPDATEをしたいのです...
-
sqlplusで表示が変なので、出力...
-
SQL*LoaderでCSVから指定した列...
-
SQLでSUMなどの関数でデータが...
-
SQL 複数テーブルのupdate
-
UPDATE文
-
件数とデータを同時に取得する...
-
特定のカラムが更新されたとき...
-
OracleのSQLで同テーブルのカラ...
-
カラム位置変更
-
SQLで違うテーブルの値を比較し...
-
LONG型の先頭250バイトを Varch...
-
PLSQLのNumber型の初期化
-
数値をNUMBER型にするかCHAR型...
-
半角英数文字の抽出がしたい。
-
DELETE文とロックについて
-
SQL(oracle)でご助言いただきた...
おすすめ情報