-1

我一直在用谷歌搜索并寻找解决问题的好方法,但我找不到任何东西。

我有两个表:table1 和 table2,我想在 table1 中找到 table2 中不存在的所有唯一电子邮件。

第一个查询返回 1420 的 int 结果,第二个查询返回总计数为 1431 的行集。

这怎么可能?我想这与我选择名称和状态有关吗?

select 
    Count(DISTINCT(Email)) 
from
    table1 t1 
where 
    t1.siteId = 4 
    and t1.Email not in (select Email from table2 t2 where t2.SiteId = 4)
go

WITH MyPage AS
(
   SELECT DISTINCT(t1.Email), 
       t1.Name, 
       t1.[Status],
       ROW_NUMBER() OVER (partition by t1.Email ORDER BY t1.Name) AS Apperences,
       ROW_NUMBER() OVER (ORDER BY t1.Name) AS RowNumber
   FROM 
       table1 t1 
   WHERE 
       t1.siteId = 4 
       AND t1.Email NOT IN (SELECT Email FROM table2 t2 WHERE t2.SiteId = 4)
)
SELECT 
    Email, Name, [Status]
FROM 
    MyPage
WHERE 
    RowNumber => 0 and RowNumber <= 50000

我知道我可以在最后一个选择上添加“不同”,但这会搞砸我想要的分页......

4

2 回答 2

1

尝试这个:

WITH MyPage 
AS
  (SELECT 
      t1.Email, 
      t1.Name, 
      t1.[Status],
      ROW_NUMBER() OVER (partition by t1.Email ORDER BY t1.Name) AS Apperences,
      ROW_NUMBER() OVER (ORDER BY t1.Name) AS RowNumber
   FROM table1 t1 
   WHERE t1.siteId = 4 
   and t1.Email not in (SELECT Email FROM table2 t2 where t2.SiteId=4)
  )

SELECT Email, Name, [Status]
FROM MyPage
WHERE RowNumber => 0 and RowNumber <= 50000
AND Apperences = 1 // this will give you the DISTINCT email
于 2013-04-06T08:29:35.053 回答
0

要获取所有不同电子邮件的列表以及仅应用一个名称,请先创建一个包含示例名称的所有不同邮件列表(我使用按字母顺序排列的最后一个),然后使用此表作为基础添加更多信息. 但是,结果,尤其是行号将毫无用处。

    WITH MyPage AS
      (SELECT t1.Email, 
        t1.Name, 
        t1.[Status],
        ROW_NUMBER() OVER (partition by t1.Email ORDER BY t1.Name) AS Apperences,
        ROW_NUMBER() OVER (ORDER BY t1.Name) AS RowNumber
        FROM 
          (select x.Email, max(Name) as name 
             from table1 t1 
            where t1.siteId = 4 
              and t1.Email not in (
              SELECT Email FROM table2 t2 where t2.SiteId=4
              )
            group by x.Email
          ) t1
    SELECT Email, Name, [Status]
    FROM MyPage
    WHERE RowNumber => 0 and RowNumber <= 50000
于 2013-04-06T08:31:20.450 回答