私はSQLの初心者なので、これが些細なこと/基本的なことだと思われる場合はお詫びします。頭を悩ませるのに苦労しています...
注文したことがなく、したがって請求書テーブルにエントリがない、顧客テーブルにあるすべての顧客を示す結果を生成しようとしています。
つまり、請求書テーブルに顧客番号のエントリがない顧客テーブルからすべての顧客を選択したいと思います。
マイク、ありがとう
私はSQLの初心者なので、これが些細なこと/基本的なことだと思われる場合はお詫びします。頭を悩ませるのに苦労しています...
注文したことがなく、したがって請求書テーブルにエントリがない、顧客テーブルにあるすべての顧客を示す結果を生成しようとしています。
つまり、請求書テーブルに顧客番号のエントリがない顧客テーブルからすべての顧客を選択したいと思います。
マイク、ありがとう
SELECT *
FROM customer c
WHERE NOT EXISTS (
SELECT 1
FROM invoice i
WHERE i.customerid = c.customerid
)
ここで、さまざまなタイプのテーブル結合に関する Oracle のドキュメントも読むことをお勧めします。
すべての顧客行を返したい場合は、LEFT JOIN
select *
from customer c
left join invoices i
on c.customerid = i.customerid
where i.customerid is null
デモで SQL Fiddle を参照してください
JOIN
構文を学習するのに助けが必要な場合は、 join の優れた視覚的な説明をご覧ください。
Aは、テーブルに一致する行がない場合でもLEFT JOIN
、テーブルからすべての行を返します。両方のテーブルで一致した行のみを返したい場合は、. をクエリに追加すると、 に一致しない行のみが返されます。customer
invoices
INNER JOIN
where i.customerid is null
invoices
customer_id が顧客を識別する列である場合、次のようにする必要があります...
select * from Customer
where customer_id not in (select customer_id from invoice)