问题:
我需要进行SELECT查询以返回shift_id
,其中day_of_week
是IN (0,1,2,3,4)
和NOT IN (5,6)
,如:
“查找班次,其中班次为周日至周四(并且周五至周六没有记录)”
数据库结构:
表shifts
:
shift_id-整数,主键...-其他栏
表shift_days
:
shift_day_id-整数,主键shift_id-int,移位表的外键day_of_week-int,其中0 =星期日,1 =星期一,...,6-星期六...-更多专栏
Ex。
shift_days
只有5条记录,day_of_week
从1到5shift_days
只有5条记录,day_of_week
从0到4P.S。我能够提出这个查询:
SELECT shift_id
FROM (
SELECT shift_id, STRING_AGG(day_of_week, ',') AS 'days_of_week'
FROM shift_days
GROUP BY shift_id
) AS sdw
WHERE sdw.days_of_week = '0,1,2,3,4'
但是我不知道如何保证顺序升序为'0,1,2,3,4',我想看看是否有替代方法使用STRING_AGG,以防我想用于其他SQL。方言。
P.P.S。
再次强调,任何匹配day_of_week(5,6)的班次都是错误的匹配,因为我想排除这些记录。
group by shift_id
having count(case when day_of_week in (5, 6) then 1 end) = 0
SELECT DISTINCT shift_id FROM shift_days S
WHERE NOT EXISTS(SELECT 1 FROM shift_days T WHERE T.shift_id=S.shift_id AND
T.day_of_week in (5, 6))