お世話になります。SQLが分からなくて困っています。
顧客データと紐づいている見積情報、請求書情報、を取得したいのですが、
下記のようにSQLを書くと見積情報が無い場合、請求情報を引くことができません。
追記==========
顧客データは更に上位概念の会社IDと紐づいています。
SQL
1select estimate.estimate_id,estimate.invoice_id 2from estimate 3left join invoice on estimate.estimate_id = invoice.estimate_id 4left join customer on customer.customer_id = estimate.customer_id 5where 6#customer.customer_id = 123456 7customer.company_id = 123456
顧客テーブルをもう1個JOINして下記のようにSQLを組んだり
SQL
1select estimate.estimate_id,invoice.invoice_id 2from estimate 3left join invoice on estimate.estimate_id = invoice.estimate_id 4left join customer on customer.customer_id = estimate.customer_id 5left join customer t1 on t1.customer_id = invoice.customer_id 6where 7#customer.customer_id = 123456 8customer.company_id = 123456
顧客テーブルのJOINのONの条件を
SQL
1select estimate.estimate_id,invoice.invoice_id 2from estimate 3left join invoice on estimate.estimate_id = invoice.estimate_id 4left join customer on 5(customer.customer_id = estimate.customer_id) 6or 7(customer.customer_id = invoice.customer_id) 8where 9#customer.customer_id = 123456 10customer.company_id = 123456
とやってみたのですが、請求情報のみある場合の取得ができませんでした。
顧客データに紐づく、見積情報と請求情報、どちらかがあれば取得できるようにするには
どうしたら良いのか教えていただけないでしょうか。
ここから追記==========
saziさんの
見積と請求を全外部結合(Full JOIN)した結果との結合にすれば良いかと思います。
上記コメントと頂いたSQLを元に、SQLを再構築しました。
私の使ってるMySQLだとFULL JOINできないのでUNION使わないとダメだそうです。
SQL
1select q1.estimate_id,q1.invoice_id 2from 3( 4select estimate.estimate_id,estimate.invoice_id 5from customer 6left join estimate 7 on (estimate.customer_id = customer.customer_id) 8where 9 customer.company_id = ? 10and 11 estimate.estimate_id is not null 12union 13select invoice.estimate_id,invoice.invoice_id 14from customer 15left join invoice 16 on (invoice.customer_id = customer.customer_id) 17where 18 customer.company_id = ? 19and 20 invoice.estimate_id is not null 21) as q1 22group by q1.estimate_id; 23
上記SQLでこのスレッドの問題については上手く行ったのですが、
そもそも問題を間違えていることに今気が付きました。
皆さん、本当にありがとうございました。
回答2件
あなたの回答
tips
プレビュー