我按要求缩短了我的故事。
我正在尝试为学生创建一个时间表。我有两张桌子:
CREATE TABLE IF NOT EXISTS TIMETABLE
(ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
YEAR TEXT NOT NULL,
DATE TEXT,
GROUP TEXT,
BEGIN TEXT,
END TEXT,
ROOM TEXT,
SUBJECT TEXT NOT NULL,
TEACHER TEXT,
IN_DATES INT,
TIMESTAMP TIME)
CREATE TABLE IF NOT EXISTS DATES
(ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
SUBJECT TEXT NOT NULL,
TEACHER TEXT NOT NULL,
GROUP TEXT,
DATE TEXT,
TIMESTAMP TEXT
第一个表格包含所有院系的所有课程(例如,第一年的学习)。第二个包含每周不发生的类日期的行(这意味着,例如,每2周或不规则的日期)。
简而言之:
如果row有IN_DATES = 0
,那么我们可以直接输出它。
如果行有IN_DATES = 1
,那么我们需要检查DATES
中是否存在具有相同日期和主题的类。如果匹配,我们从TIMETABLE
输出整行。如果没有匹配,我们不会显示此行。
如何编写SQL查询来完成此任务?
我的英语可能不是很好,因为它不是我的母语。
新年快乐;)
答案 0 :(得分:0)
SELECT *
FROM Timetable t
WHERE in_dates = 0 OR
(
in_dates = 1 AND
EXISTS (
SELECT 1
FROM Dates d
WHERE d.subject = t.subject AND
d.date = t.date
)
)