我使用此方法检查一行是否在另一个表中被外键控制。
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
是否可以按照我的评论进行操作?
答案 0 :(得分:5)
您可以使用exists
和case
表达式:
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表的其他字段(例如,如果父母确实存在,则显示父母姓名)。