我有两个表,船和预订,这是他们的架构:
boat: bname (string), color (string), rating (integer)
reservation: sname (string), bname (string), day (string)
我试图找到只保留红船的日子,没有别的。我使用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
语法。
答案 1 :(得分: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);