2016-10-17 39 views
-1

我想从表中的订单,其中从表用户列EMAIL_ID包含重复(行中的用户与重复的邮件)列表的列表搜索ID。另一个表从重复

SELECT 
    o.[Email], o.[Email_Id], d.intCount 
FROM (
    SELECT [Email], COUNT(*) as intCount 
    FROM [Server].[dbo].[Table] 
    GROUP BY [Email] 
    HAVING COUNT(*) > 1 
) AS d 
    INNER JOIN [Server].[dbo].[Table] o ON o.[Email] = d.[Email] 

所以我也尝试以下操作:

SELECT * FROM [Server].[dbo].[Orders] 
WHERE [Email_Id] IN/ 
    SELECT 
     o.[Email], o.[Email_Id], d.intCount 
    FROM (
     SELECT [Email], COUNT(*) as intCount 
     FROM [Server].[dbo].[Users] 
     GROUP BY [Email] 
     HAVING COUNT(*) > 1 
    ) AS d 
     INNER JOIN [Server].[dbo].[Users] o ON o.[Email] = d.[Email] 
) 

它返回一个只有一个表达式可以在选择列表中指定当子查询未与EXISTS介绍。

SELECT [Order_Is], (
SELECT 
     o.[Email], o.[Email_Id], d.intCount 
    FROM (
     SELECT [Email], COUNT(*) as intCount 
     FROM [Server].[dbo].[Users] 
     GROUP BY [Email] 
     HAVING COUNT(*) > 1 
    ) AS d 
     INNER JOIN [Server].[dbo].[Users] o ON o.[Email] = d.[Email] 
    ) 
as [Email_Id] 
FROM [Server].[dbo].[Orders] 

有了相同的结果:

与也试过。

任何想法我做错了什么?

谢谢!

+1

接着说:SQL-server'标签使用 –

+0

语法中的第二次尝试看起来很有希望,只有'IN'关键字需要同柱,没有多列比较。 – krtek

回答

0

WHERE语句子查询,你只能有一个字段或表达式IN运营商,这是错误说什么,试试这个方法:

基于
SELECT * FROM [Server].[dbo].[Orders] 
WHERE [Email_Id] IN (
    SELECT 
     o.[Email_Id] 
    FROM (
     SELECT [Email], COUNT(*) as intCount 
     FROM [Server].[dbo].[Users] 
     GROUP BY [Email] 
     HAVING COUNT(*) > 1 
    ) AS d 
     INNER JOIN [Server].[dbo].[Users] o ON o.[Email] = d.[Email] 
) 
2
SELECT * 
FROM [Server].[dbo].[Orders] 
JOIN (SELECT [Email], [Email_Id], 
       count(*) over (partition by [Email]) as cnt 
     FROM [Server].[dbo].[Users]) tt 
    on tt.[Email_Id] = [Orders].[Email_Id] 
and tt.[cnt] > 1 
相关问题