2

私はSQLの初心者なので、これが些細なこと/基本的なことだと思われる場合はお詫びします。頭を悩ませるのに苦労しています...

注文したことがなく、したがって請求書テーブルにエントリがない、顧客テーブルにあるすべての顧客を示す結果を生成しようとしています。

つまり、請求書テーブルに顧客番号のエントリがない顧客テーブルからすべての顧客を選択したいと思います。

マイク、ありがとう

4

3 に答える 3

3
SELECT *
FROM customer c
WHERE NOT EXISTS (
         SELECT 1
           FROM invoice i
          WHERE i.customerid = c.customerid
      )

ここで、さまざまなタイプのテーブル結合に関する Oracle のドキュメントも読むことをお勧めします。

于 2013-02-19T11:45:30.183 に答える
2

すべての顧客行を返したい場合は、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、テーブルからすべての行を返します。両方のテーブルで一致した行のみを返したい場合は、. をクエリに追加すると、 に一致しない行のみが返されます。customerinvoicesINNER JOINwhere i.customerid is nullinvoices

于 2013-02-19T11:43:26.330 に答える
2

customer_id が顧客を識別する列である場合、次のようにする必要があります...

select * from Customer
where customer_id not in (select customer_id from invoice)
于 2013-02-19T11:45:25.503 に答える