如何在查询中使用count而不是not exists?

时间:2016-10-25 02:09:45

标签: sql sqlite

我有两个表,船和预订,这是他们的架构:

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);

任何帮助将不胜感激,谢谢

2 个答案:

答案 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);