如果为null则将字段转换为位0,否则为1

时间:2015-05-02 05:54:51

标签: sql sql-server

我使用此方法检查一行是否在另一个表中被外键控制。

select
  personID,
  name,
  (
    /* CAST THIS PART TO BIT return 1 if field is found, 0 if not */
    select top 1 parents.personID
    from parents
    where parents.personID=persons.personID

  ) as inUse
from persons

是否可以按照我的评论进行操作?

2 个答案:

答案 0 :(得分:5)

您可以使用existscase表达式:

select personID
     , name
     , case when exists ( select *
                          from parents
                          where parents.personID=persons.personID) then 1 else 0 end as inUse
from persons

或者只是执行left join

select distinct pe.personID
     , pe.name
     , case when pa.personID is null then 0 else 1 end as inUse
from persons pe
left join parents pa on pa.personID = pe.personID

答案 1 :(得分:4)

我会使用LEFT OUTER JOIN并测试结果。

它看起来像这样:

select
  personID,
  name,
  case when parents.personID is null then 0 else 1 end as 'HasAParent'
from persons
left outer join parents
on parents.personID=persons.personID

这也允许您在选择中使用Parents表的其他字段(例如,如果父母确实存在,则显示父母姓名)。