从另一个表中是否存在匹配行创建列?

时间:2010-11-02 08:25:57

标签: mysql

假设我有一张桌子和一张桌子宠物,我想展示所有有宠物的人和所有没有宠物的人。一个人可以没有宠物或任何数量的宠物。

我可以使用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数据合并为一个额外的布尔值列。

有可能这样做吗?

2 个答案:

答案 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

http://dev.mysql.com/doc/refman/5.0/en/case-statement.html