我有这个问题,我无法解决:
表格“habitacions”记录了每个房间的客人必须被唤醒的时间(“hora”和“minut”列)。如果时间为空值,则不得唤醒客人。给出一个返回某人必须被唤醒的不同小时数(忽略列“minut”)的 SQL 语句。不愿被唤醒被认为是一个新的不同时刻。
CREATE TABLE vigilants(
nom VARCHAR(20) PRIMARY key,
edat integer);
CREATE TABLE rondes(
hora INTEGER,
planta INTEGER,
vigilant VARCHAR(20) REFERENCES vigilants,
PRIMARY KEY(hora, planta));
CREATE TABLE habitacions(
num INTEGER,
planta INTEGER,
places INTEGER,
hora INTEGER,
minut INTEGER,
PRIMARY KEY(num, planta),
FOREIGN KEY(hora, planta) REFERENCES rondes);`
有这个限制:尽量减少解决查询所需的子查询数量。此外,不允许使用以下结构: - FROM 或 SELECT 中的 SELECT。您可以有子查询(SELECT 在 WHERE 或 HAVING 中) - 聚合函数的组合,例如 COUNT (COUNT...))、SUM (COUNT...)) 等。- 如果你能避免它,UNION。- 非标准功能(如 NVL) - CASE
示例:使用此插入:
INSERT INTO vigilants(nom, edat) VALUES ('Mulder', 32);
INSERT INTO vigilants(nom, edat) VALUES ('Scully', 30);
INSERT INTO rondes(hora, planta, vigilant) VALUES (7, 1, 'Mulder');
INSERT INTO rondes(hora, planta, vigilant) VALUES (8, 1, 'Mulder');
INSERT INTO rondes(hora, planta, vigilant) VALUES (7, 2, 'Mulder');
INSERT INTO habitacions(num, planta, places, hora, minut) VALUES (1, 1, 1, 7, 30);
INSERT INTO habitacions(num, planta, places, hora, minut) VALUES (5, 1, 1, 7, 30);
INSERT INTO habitacions(num, planta, places, hora, minut) VALUES (2, 1, 1, 8, 30);
INSERT INTO habitacions(num, planta, places, hora, minut) VALUES (3, 1, 1, null, null);
INSERT INTO habitacions(num, planta, places, hora, minut) VALUES (4, 1, 1, null, null);
INSERT INTO habitacions(num, planta, places, hora, minut) VALUES (1, 2, 1, null, null);
结果是 3 :)(7,8 和 null)
很多