2016-10-25 10 views
0

私は2つのテーブル、ボートや予約を持っており、これは彼らのスキーマです:クエリではなくカウントを使用するにはどうすればよいですか?

boat: bname (string), color (string), rating (integer) 
reservation: sname (string), bname (string), day (string) 

私はONLY赤いボートを予約していないと何もされている日を見つけようとしています。 NOT EXISTSを使用してクエリを作成しましたが、COUNTを使用してそれを書き込む方法を理解することはできません。これはsqlite3を使用しています

これは宿題です。私は答えを探しているのではなく、これにアプローチする方法についてアドバイスを探しています。私はそれを狭くすることができ、赤いボートと他の色のボートが混在している時だけを得ることができましたが、そこからどのように接近するのかはわかりません。

たとえば、月曜日、火曜日、水曜日に予約された赤いボートがあるが、火曜日に緑色のボートが予約されている場合、クエリは火曜日に返されますが、NOT INまたはNOT EXISTSを使用できないため、そこからどのように進むべきかわかりません。ここで問題になっているクエリは次のとおりです。

SELECT distinct R.day from reservation R, boat b 
WHERE r.bname = b.bname and b.color = 'red' AND 
(SELECT count(*) from reservation R2, boat B 
WHERE R2.bname = B.bname and COLOR != 'red' AND R.day = R2.day group by R2.day); 

任意の助けが理解されるであろう、これは直接あなたの質問に答えていませんが、私はこのような質問に答えるでしょう、あなたに

+0

カウントがゼロであることを意味し、「存在しません」。 –

答えて

2

に感謝:

select r.day 
from reservation r join 
    boat b 
    on r.bname = b.bname 
group by r.day 
having min(b.color) = 'red' and max(b.color) = 'red'; 

注記:from句にカンマを使用しないでください。あなたは常に正しい、明示的なjoin構文を使用する必要があります。

+0

ありがとうございますが、私のケースではこれはうまくいかないと思います。私たちは特にCOUNTを使用し、NOT EXISTSの動作を再現するように指示されました。 – BlueB3rryI3

0

たぶん、あなたはこのような何かを探しています:

SELECT DISTINCT R.day FROM reservation r, boat b 
    WHERE r.bname = b.bname AND b.color = 'red' AND 
    (SELECT count(*) from reservation R2 
     WHERE r.day = R2.day) = 
    (SELECT count(*) from reservation R2, boat B2 
     WHERE R2.bname = B2.bname AND b2.color = 'red' AND r.day = R2.day group by R2.day); 
関連する問題