使用内部联接从子表中获取TOP行

时间:2009-12-21 15:54:34

标签: sql sql-server sql-server-2008

我希望使用基于ID的子表进行内连接,并获取子表的顶行, 我没有加入从子表中获取任何数据,它只是为了验证父表的子表记录是否存在。 如果我不包括TOP行,则有可能在结果集中获得多行父级。

- 同一PARENTID的结果集中有多行可能

  

从父母P中选择P.PARENTID   内心加入儿童C C.PARENTID =   P.PARENTID和C.ISACTIVE = 1

我需要像

这样的东西
  

从父母P中选择P.PARENTID   INNER JOIN(选择TOP * *来自儿童)作为C
  ON C.PARENTID = P.PARENTID   AND C.ISACTIVE = 1

我不确定如何让它发挥作用 我很好奇是否有人可以帮助我或者在我能找到解决方案的地方提供任何网址

3 个答案:

答案 0 :(得分:6)

您认为 WHERE EXISTS 能够胜任吗?

SELECT P.PARENTID FROM PARENT P 
WHERE EXISTS (SELECT 1  FROM CHILD C 
WHERE C.PARENTID = P.PARENTID 
AND C.ISACTIVE = 1)

答案 1 :(得分:0)

做这样的事情不是更好:

SELECT * FROM parent WHERE parentId not in ( select parentid from child where isactive = 1 )

通过这样做,您将获得“父”中所有记录的列表,这些记录在“子”中没有关联记录。

为了检索在孩子中有记录的父母,只需颠倒标准:

select * from parent where parentId in ( select distinct parentId from  child where isactive = 1 )

我在这里指定了distinct,以确保每个parentId只列出一次,因此父本身在结果集中只返回一次。

答案 2 :(得分:0)

可能不是最有效的方式,但是:

SELECT p.parentid FROM parent p
WHERE (SELECT COUNT(*) FROM child c WHERE c.parentid = p.parentid AND c.isactive)
    >= 1