根据SQL Server中的子列选择记录

时间:2017-01-16 18:07:31

标签: sql-server sql-server-2008

我试图根据子表条件获取数据,但是它返回了错误的结果。

如果子表日期小于今天,则将IsActive更新为true,否则为false。

父表有1条记录,子表有20条记录

select * 
from parenttable 
where exist (select * 
             from childtable child, parenttable parent 
             where changedate < getdate() 
             and parent.id = child.id)

子查询返回正确答案。但我认为问题存在

2 个答案:

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