假设我有一张桌子人和一张桌子宠物,我想展示所有有宠物的人和所有没有宠物的人。一个人可以没有宠物或任何数量的宠物。
我可以使用IF EXISTS,但是我必须使用两个查询:
select * from person where exists (select * from pet where person.id = pet.owner)
和
select * from person where not exists (select * from pet where person.id = pet.owner)
有没有办法在单个查询中合并这些内容,这样我就可以拥有一个人员数据列表,其中包含一个额外的列,表明该人是否有宠物?我不想使用group by和count,因为我不需要实际数量的宠物,只有信息,如果有宠物,所以我想将上述两个查询的EXISTS数据合并为一个额外的布尔值列。
有可能这样做吗?
答案 0 :(得分:0)
SELECT person.*, COUNT(pets.id)>0 AS have_pets FROM person LEFT JOIN pet ON pet.owner=person.id;
答案 1 :(得分:0)
替代解决方案
select
p.*,
case when exists
(
select *
from pets
where personId = p.id
)
then select 1
else select 0
end
as HasPets
from person p