【发布时间】:2021-05-23 14:38:58
【问题描述】:
我有一张桌子,可以存放宠物和一定数量的疫苗。一栏是标识符,另一栏是疫苗名称,第三栏是完成日期。如果日期为空,则表示宠物尚未接种该疫苗。
这个结构是下一个:
CREATE TABLE pets (
pet VARCHAR (10),
vaccine VARCHAR (50),
complete_date DATE
);
INSERT INTO pets VALUES ('DOG001', 'Adenovirus', '2021-01-03');
INSERT INTO pets VALUES ('DOG001', 'Parvovirus', '2021-02-03');
INSERT INTO pets VALUES ('DOG001', 'Leptospirosis', null);
INSERT INTO pets VALUES ('CAT774', 'Calcivirosis', '2021-01-06');
INSERT INTO pets VALUES ('CAT774', 'Panleukopenia', null);
INSERT INTO pets VALUES ('DOG002', 'Adenovirus', '2020-12-21');
INSERT INTO pets VALUES ('DOG002', 'Parvovirus', '2021-02-01');
INSERT INTO pets VALUES ('DOG002', 'Leptospirosis', '2021-03-01');
| pet | vaccine | complete_date |
|---|---|---|
| DOG001 | Adenovirus | 2021-01-03 |
| DOG001 | Parvovirus | 2021-02-03 |
| DOG001 | Leptospirosis | null |
| CAT774 | Calcivirosis | 2021-01-06 |
| CAT774 | Panleukopenia | null |
| DOG002 | Adenovirus | 2020-12-21 |
| DOG002 | Parvovirus | 2021-02-01 |
| DOG002 | Leptospirosis | 2021-03-01 |
考虑到所有疫苗,我需要一份所有“日期”不为空的宠物的列表。
在本例中,结果应该是简单的“DOG002”,因为它是唯一一个所有日期都具有非空值的动物。
【问题讨论】:
-
SELECT pet FROM pets WHERE complete_date IS NOT NULL EXCEPT SELECT pet FROM pets WHERE complete_date IS NULL是一种方法,但不一定是最明显或最有效的方法。
标签: sql sql-server tsql