こんな問い合わせがあります
select * from Cars where
car_id!=(Select car_id from reservation where reservation_date between '2013-05-13' and '2013-05-15')
その日付の間に何もない場合は car_id='' を取りたいのですが、機能していません。
最初に、これが適切な値を返しているかどうかを確認します
Select car_id
from reservation
where reservation_date
between '2013-05-13' and '2013-05-15'
これを試して:
select *
from Cars
where car_id
not in
(
Select car_id
from reservation
where reservation_date between '2013-05-13' and '2013-05-15'
)
draxxxeus の回答に従って「not in」を使用すると機能しますが、大量のデータを取得すると、クエリが遅くなります。直感的ではありませんが、論理的に同等の答えを得るための方法は次のとおりです。
where car_id in
(select car_id
from cars
except
select car_id
from reservation
etc
)
データベースがその構文をサポートしている場合、「not in」を使用するよりも高速に実行されます。一部のデータベース、たとえば Oracle では、「except」の代わりに「minus」という単語を使用する必要があります。