我有以下两个表,需要一个具有这些要求的SQL(无UNION
)。
如果CHECK_CHILD
为FALSE
,则只返回Parent表中的行。
如果CHECK_CHILD
为TRUE
,则检查CHILD表中是否有引用行并返回PARENT行。如果CHILD表中没有参考行,则不要返回PARENT行。
PARENT Table
ID INT (PK)
CHECK_CHILD BOOLEAN
CHILD TABLE
ID INT (PK)
PARENT_ID INT (FK)
示例数据:
PARENT Table
------------
ID CHECK_CHILD
1 FALSE
2 TRUE
3 TRUE
CHILD Table
-----------
ID PARENT_ID
1 2
使用此示例数据,查询应返回PARENT表中的前两行,因为第三行在CHILD表中没有引用行。
答案 0 :(得分:0)
有两种选择:
select P.*
from PARENT P
left outer join CHILD C
on C.PARENT_ID = P.ID
where P.CHECK_CHILD = 'FALSE'
or C.PARENT_ID is not null
或
select *
from PARENT P
where P.CHECK_CHILD = 'FALSE'
or (
P.CHECK_CHILD = 'TRUE'
and exists (select 1 from CHILD C where C.PARENT_ID = P.ID)
)