
2つのテーブルから条件に一致しない行のみ抜き出しCSV
か他のテーブルに抜き出す処理を作ろうと思っています。
そこで質問なのですが、以下の2つのテーブルから
条件に一致しないコードのみ抜き出すSQL文などありますか?
-----------------------------------------
マスターテーブル
コード、ネーム1、ネーム2、店コード
1、あ、い、6
2、う、え、8
3、お、か、4
4、き、く、2
店コードテーブル
店コード、店区分
1、スーパー
2、コンビニ
3、デパート
4、ホームセンター
------------------------------------------
条件は、マスターテーブルの店コードが店コードテーブルに存在
しないデータのみ抽出です。
抽出結果は、以下の様にしたいです。
1、あ、い、6
2、う、え、8
このような考え大丈夫でしょうか?
SELECT *
FROM マスターテーブル AS M INNER JOIN 店コードテーブル AS S
ON M.店コード = S.店コード
わかりずらい質問ですがよろしくお願いします。
No.2ベストアンサー
- 回答日時:
このような考え大丈夫でしょうか?
SELECT *
FROM マスターテーブル AS M INNER JOIN 店コードテーブル AS S
ON M.店コード = S.店コード
店コードが一致するレコードを抽出しているのですね。
はい、大丈夫です。
もっとも単純に、分かりやすい式を書くのであれば
この条件否定なので
left outer join で結合して、結合できなかったデータ、
つまり、店がNullのデータを取れば抽出できます。
SELECT *
FROM マスターテーブル AS M left outer join 店コードテーブル AS S
ON M.店コード = S.店コード
where S.店コード is null
または、
SELECT *
FROM マスターテーブル as M
where M.店コード not in ( select 店コード from 店コードテーブル)
等でいけるでしょう。
ただ、参考URLにもありますように、
is null とか not in は遅いです。(Indexで見れなくなるので)
大量データを扱うような場合や、速度が求められるような場合は
別途クエリを検討しましょう。
参考URL:http://www.geocities.jp/mickindex/database/db_op …
No.1
- 回答日時:
>SELECT *
>FROM マスターテーブル AS M INNER JOIN 店コードテーブル AS S
>ON M.店コード = S.店コード
上記のようにINNER JOINしてしまうと、両テーブルに存在する店コードの行のみ選択されます。
外部結合を行って、マスターテーブルの全行を戻し、WHERE句で店コードテーブル側に存在しない(IS NULLを指定)行を選択します。
または、以下のように「not in」「not exists」を使う方法もあります。
select M.*
from マスターテーブル AS M
where M.店コード not in (select 店コード from 店コードテーブル AS S);
select M.*
from マスターテーブル AS M
where not exists (select 店コード from 店コードテーブル AS S WHERE M.店コード = S.店コード);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
教えて!gooグレードポイントがdポイントに変わります!
dアカウント連携を行っていただくと、グレードに応じて「dポイント」が進呈されるようになります。
-
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
GROUP BYを行った後に結合したい。
Oracle
-
4
SQL Left Join で重複を排除するには
SQL Server
-
5
SELECT 文 GROUP での1件目を取得
SQL Server
-
6
重複していないレコードの抽出方法について
MySQL
-
7
二つの表の項目を比較して値を取得するSQL
その他(データベース)
-
8
SELECTで1件のみ取得するには?
Oracle
-
9
SQL文のwhere条件文で使う <> の意味はなんですか
その他(データベース)
-
10
2つの列が同じ値の行を取得するSQL
Oracle
-
11
単一グループのグループ関数ではありません。
Oracle
-
12
MAX関数を使ってからLEFT JOINしたいのですが・・
PHP
-
13
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
14
一致するデータのみ削除したい
MySQL
-
15
INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい
その他(データベース)
-
16
Unionの結果全体をOrder By したい。
SQL Server
-
17
SQL 複数テーブルのupdate
Oracle
-
18
Where句のNot条件をAnd条件にしたい!
Oracle
-
19
データベースのINT型項目にNULLはNG?
MySQL
-
20
group byで指定したカラム以外のカラムの値を取得したい
PostgreSQL
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
ACCESS2000でDCount関数の使い方
-
5
ACCESS 一つのフィールドに複...
-
6
重複するキーから一番古い年月...
-
7
場合によって条件を変えるSQL
-
8
履歴を管理するテーブル構造に...
-
9
ACCESSのコンパイルエラーについて
-
10
PLSQLの識別子エラー
-
11
Inner join と Left joinの明...
-
12
行方向のデータを横に並べる
-
13
連番のMin, Maxを取得したい
-
14
自分自身への矢印
-
15
Accessでフィールドを比較した...
-
16
主キーの変更
-
17
3つのテーブルから条件に一致し...
-
18
社内コードをソースコードに直...
-
19
副問い合わせでのNULLの抽出方法
-
20
ACCESSのデータシート形式のフ...
おすすめ情報
公式facebook
公式twitter