2016-11-09 175 views
0

我得到一个错误与我的子查询,并没有看到我做错了什么。子查询在它上面工作。那里的问题显然是什么问题。也尝试过EXISTS。SQL子查询(Where In)

select [ID NUMBER], [PERNO], [TITLE], [INITIALS], [SURNAME], [DATE OF BIRTH] 
from dbo.[DATASEPT002] 
WHERE [ID NUMBER] IN 
(SELECT [ID NUMBER], COUNT([PERSALNO]) AS COUNTOF 
FROM [dbo].[DATASEPT] 
GROUP BY [ID NUMBER] HAVING COUNT([PERSALNO]) >1) 
+0

子查询冗余返回'COUNT([PERSALNO])'。 –

+0

我忘了补充。我也尝试只从子查询中选择ID号码,所以子查询只是ID号码,但还没有能够做到这一点。 Thx格式化。 – user4242750

+0

请包括您使用***实际查询***与您遇到的***实际错误/问题***。如果您尝试过两次或更多的查询,请提供***全部***,每个都带有相关的错误/问题。 – MatBailie

回答

1

在子查询中有两列。只有一个可以被用于IN比较:

select [ID NUMBER], [PERNO], [TITLE], [INITIALS], [SURNAME], [DATE OF BIRTH] 
from dbo.[DATASEPT002] t 
WHERE [ID NUMBER] IN (SELECT [ID NUMBER] 
         FROM [dbo].[DATASEPT] 
         GROUP BY [ID NUMBER] 
         HAVING COUNT([PERSALNO]) > 1 
        ); 

然而,我会表达此更通常使用窗口函数:

select t.* 
from (select t.*, count(*) over (partition by persalno) as cnt 
     from DATASEPT002 t 
    ) t 
where cnt > 1; 
+0

Gordon有两个不同的表格,所以你的第二个例子是不正确的 –

+0

第一个工作。谢谢 – user4242750

+0

@ user4242750 - 然后对您的OP的评论是误导性的或不正确的。因为你的查询唯一的变化是这个'只从子查询中选择ID号码',你说'但是还没有做到这一点'。 – MatBailie