こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

left outer joinが上手くいきません

四つのテーブルに分かれたデータを、結合しつつ、結合後のテーブルのデータがチェック用テーブルに含まれていないものを抽出したいのですが、left outer joinなど色々ためしても、構文エラーなどになって上手くいきません。

具体的に書くと、


【顧客名テーブル:customer】
顧客ID:customer_id
顧客コード:customer_code
顧客名:customer_name

【最新申込みテーブル:recently】
顧客ID:customer_id
日付:order_date

【過去申込みテーブル:old】
顧客ID1:customer_id1
顧客ID2:customer_id2
日付:order_date

【チェック用テーブル:check】
顧客コード:customer_code
顧客名:customer_name


とあるとします。

【最新購入テーブル】と【過去購入テーブル】の両方の顧客IDを抽出し、【顧客名テーブル】の顧客IDと紐付けしてから、顧客コードの一覧を作り、【チェック用テーブル】の顧客コードに含まれない、【顧客名テーブル】の顧客コードを一覧で出力したいのですが、なかなか上手くいかなくて困っています。

ややこしいのは、【過去購入テーブル】の中に含まれる顧客ID1、顧客ID2ともに、フィールド名は違いますが、登録されるデータは、【顧客名テーブル】の顧客IDと同じになるので、【最新購入テーブル】と【過去購入テーブル】で抽出する顧客ID一覧は、


顧客ID:customer_id
顧客ID1:customer_id1
顧客ID2:customer_id2

の三つになります。

UNIONなどで結合した顧客ID一覧を【顧客名テーブル】とつないで顧客コードを出して...など色々やってはみましたが、構文エラーが多く、そもそもどこが間違っているかもよくわからなくて、困っています(>_<)

投稿日時 - 2017-10-14 16:37:30

QNo.9385812

困ってます

質問者が選んだベストアンサー

select customer_id from customer where
( customer.customer_id in (select customer_id from recently) or customer.customer_id in (select customer_id from oldtime) )
and customer_code not in (select customer_code from checkdo)
;

動作チェックはしていません。

投稿日時 - 2017-10-14 19:20:50

補足

条件を複数含めるというのをヒントにして、自己解決しました。
ありがとうございました。
ーーーー
SELECT customer_code,customer_name
FROM (
SELECT customer_code,customer_name FROM recently
INNER JOIN customer ON recently.customer_id = customer.customer_id
UNION SELECT customer_code,customer_name FROM old
INNER JOIN customer ON old.customer_id1 = customer.customer_id
UNION SELECT customer_code,customer_name FROM old
INNER JOIN customer ON old.customer_id2 = customer.customer_id
) as code
LEFT OUTER JOIN check ON code.customer_code = check.customer_code
WHERE customer_name is NULL

投稿日時 - 2017-10-16 09:03:27

お礼

1テーブルずつ、該当のレコードがあるかどうかを調べるというやり方もあるんですね。ありがとうございます、参考になります!

投稿日時 - 2017-10-15 11:51:25

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)