我目前正在开发一个数据库,该数据库存储允许用户在餐厅预订的信息。
我正在尝试创建一个SQL语句,它返回在预留表中出现少于两次的时间。
目前我有这个,但这只会返回保留表中没有出现的次数。
SELECT *
FROM TIME
WHERE
TIME NOT IN (
SELECT reservation.a_time
FROM
RESERVATION
JOIN TIME ON
reservation.a_time = time.time
WHERE
reservation.a_date = :the_date
)
ORDER BY time;
上述语句返回不在预订表中的所有时间。但是,我如何返回保留表中出现的所有时间,包括那些出现一次而不是出现两次的那些?
由于
答案 0 :(得分:3)
select
*
from
TIME t
where
(select
count(r.a_time)
from
RESERVATION r
where
r.a_time = t.time and
r.a_date = :the_date) < 2
或
select
t.time /* and maybe other field, which you need to add to Group By as well */
from
TIME t
left join RESERVATION r on r.a_time = t.time and r.a_date = :the_date
group by
t.time
having
count(t.time) < 2
我更喜欢第一种,因为它更清晰,更清晰,并且可以更容易扩展,尽管有次选择。
答案 1 :(得分:-1)
如果您唯一关心的是返回reservation.a_time
一次只显示一次,那么这样就可以了:
SELECT reservation.a_time
FROM RESERVATION
GROUP BY reservation.a_time
HAVING COUNT(*) = 1;
这会按时间对所有RESERVATION
个条目进行分组,并且只返回只有一个成员的组。