我有一张桌子
petVac(宠物、疫苗)
数据如下所示:
pet vaccine
P1 | V1
P2 | V2
P3 | V3
P1 | V3
P2 | V4我想知道是否可以创建一个查询,列出宠物尚未接种的宠物和疫苗。
疫苗列中列出的疫苗是唯一可用的疫苗,因此,例如,它将导致如下结果:
pet |vaccineNotTaken
P1 V2
P1 V4
P2 V1
P2 V3
P3 V1
P3 V2
P3 V4等等。
我试着做select pet, vaccine from petVac where not exists (select distinct pet, vaccine from petVac);,但结果是一个空集。我不知道该怎么做,有没有可能?
发布于 2021-05-02 12:19:22
使用“日历”表方法为所有宠物和疫苗生成集合,我们可以尝试:
SELECT p.pet, v.vaccine AS vaccineNotTaken
FROM (SELECT DISTINCT pet FROM petVac) p
CROSS JOIN (SELECT DISTINCT vaccine FROM petVac) v
LEFT JOIN petVac t
ON t.pet = p.pet AND t.vaccine = v.vaccine
WHERE
t.pet IS NULL;在这里,我们使用从包含所有宠物/疫苗组合的日历表到您的petVac表的左反联接,只保留没有数据的对。
https://stackoverflow.com/questions/67352858
复制相似问题