我试图根据子表条件获取数据,但是它返回了错误的结果。
如果子表日期小于今天,则将IsActive
更新为true,否则为false。
父表有1条记录,子表有20条记录
select *
from parenttable
where exist (select *
from childtable child, parenttable parent
where changedate < getdate()
and parent.id = child.id)
子查询返回正确答案。但我认为问题存在
答案 0 :(得分:1)
虽然它不是join
,但是&#34;子表&#34;在exists
子句中(是exists
而不是exist
)需要&#34;链接&#34;到
select * from parenttable p where exists
(select * from childtable c
where c.pid=p.id and changedate < getdate())
假设子表中有一列pid
,对应于父表中的id
列。
答案 1 :(得分:0)
如果子查询返回正确的数据,那么去除查询的外部部分,只返回子查询中的数据:
select parent.*
from childtable child
INNER JOIN parenttable parent
on parent.id=child.id
where changedate < getdate()
根本不需要进行存在检查。如果要确保每个父级只返回一行,只需添加一个DISTINCT子句:
select DISTINCT
parent.*
from childtable child
INNER JOIN parenttable parent
on parent.id=child.id
where changedate < getdate()