Sql 合并两个表并比较第三个表是否重复?

Sql 合并两个表并比较第三个表是否重复?,sql,sql-server,Sql,Sql Server,我有3个表,它们都由一个emailaddress连接 我要做的是在其中两个表上进行并集,并找到其中一个表中存在的重复项,但不是两个表都存在 Select * From tbl3 t3 LEFT JOIN ( Select emailaddress From tbl1 t1 UNION Select emailadress FROM tbl2 t2 ) as customer ON t3.emailadress = customer.emailaddress 我是否需要找出tbl1或t

我有3个表,它们都由一个emailaddress连接

我要做的是在其中两个表上进行并集,并找到其中一个表中存在的重复项,但不是两个表都存在

Select *
From tbl3 t3
LEFT JOIN (
Select emailaddress From tbl1 t1
UNION
Select emailadress FROM tbl2 t2    
) as customer 
ON t3.emailadress = customer.emailaddress
我是否需要找出tbl1或tbl2中是否存在重复记录,而不是两者都存在

谢谢


编辑:很抱歉,我说得不太好,我正在尝试从表3中获取电子邮件地址,并将其与表1和表2中的电子邮件地址进行比较,以查看这些表中是否只有一条记录,但两个表中都没有。

您需要将
tbl3
连接到具有左连接的其他两个表:

SELECT t3.emailadress email3, t1.emailadress email1, t2.emailadress email2
FROM tbl3 t3
LEFT JOIN tbl1 t1 ON t3.emailadress = t1.emailaddress
LEFT JOIN tbl2 t2 ON t3.emailadress = t2.emailaddress
您还可以添加
where
子句,如:

WHERE t1.emailaddress is not null or t2.emailaddress is not null

要筛选出任何其他表中不存在的
tbl3
行。

您需要将
tbl3
与其他两个具有左联接的表联接:

SELECT t3.emailadress email3, t1.emailadress email1, t2.emailadress email2
FROM tbl3 t3
LEFT JOIN tbl1 t1 ON t3.emailadress = t1.emailaddress
LEFT JOIN tbl2 t2 ON t3.emailadress = t2.emailaddress
您还可以添加
where
子句,如:

WHERE t1.emailaddress is not null or t2.emailaddress is not null
筛选出任何其他表中不存在的
tbl3

我要做的是在两个表上并集,然后找到 存在于其中但不同时存在于两者中的重复项

Select *
From tbl3 t3
LEFT JOIN (
Select emailaddress From tbl1 t1
UNION
Select emailadress FROM tbl2 t2    
) as customer 
ON t3.emailadress = customer.emailaddress
是的,请尝试一组,如下所示:

SELECT *
FROM tbl3 t3
LEFT JOIN (
SELECT emailaddress FROM tbl1 GROUP BY emailaddress HAVING COUNT(*) > 1
UNION
SELECT emailadress FROM tbl2 GROUP BY emailaddress HAVING COUNT(*) > 1    
) AS [customer] 
ON t3.emailadress = customer.emailaddress
只需断开组成联合体的选择,以便您可以看到它们返回DUP:

我要做的是在两个表上并集,然后找到 存在于其中但不同时存在于两者中的重复项

Select *
From tbl3 t3
LEFT JOIN (
Select emailaddress From tbl1 t1
UNION
Select emailadress FROM tbl2 t2    
) as customer 
ON t3.emailadress = customer.emailaddress
是的,请尝试一组,如下所示:

SELECT *
FROM tbl3 t3
LEFT JOIN (
SELECT emailaddress FROM tbl1 GROUP BY emailaddress HAVING COUNT(*) > 1
UNION
SELECT emailadress FROM tbl2 GROUP BY emailaddress HAVING COUNT(*) > 1    
) AS [customer] 
ON t3.emailadress = customer.emailaddress
只需断开组成联合体的选择,以便您可以看到它们返回DUP:


有关SQL Server 2019的完整解决方案,请参见db FIDLE链接:

查询如下:

SELECT
  tbl3.emailaddress,
  cnt
FROM tbl3,
     (SELECT
       emailaddress,
       COUNT(1) AS "cnt"
     FROM (SELECT
       *
     FROM tbl1
     UNION
     SELECT
       *
     FROM tbl2) tab
     GROUP BY emailaddress
     HAVING COUNT(1) > 0) tab1
WHERE tbl3.emailaddress = tab1.emailaddress
AND cnt = 1

假设:在任何表tbl1、tbl2和tbl3中,电子邮件地址的出现次数都不会超过一个。

SQL Server 2019上的完整解决方案可以在db FIDLE link中找到:

查询如下:

SELECT
  tbl3.emailaddress,
  cnt
FROM tbl3,
     (SELECT
       emailaddress,
       COUNT(1) AS "cnt"
     FROM (SELECT
       *
     FROM tbl1
     UNION
     SELECT
       *
     FROM tbl2) tab
     GROUP BY emailaddress
     HAVING COUNT(1) > 0) tab1
WHERE tbl3.emailaddress = tab1.emailaddress
AND cnt = 1

假设:一个电子邮件地址在tbl1、tbl2和tbl3表中的出现次数不会超过一个。

示例数据和期望的结果会有所帮助。你说的“存在于一个系统中但不是同时存在于两个系统中的重复项”是什么意思?如果某个东西不是重复的,那么它是如何“重复”的呢?对不起,戈登,我只是为了更具体地编辑了它。所以,再次给出示例数据和期望的结果示例数据和期望的结果会有所帮助。你说的“存在于一个系统中但不是同时存在于两个系统中的重复项”是什么意思?如果某个东西不是重复的,那么它是如何“重复”的呢?对不起,戈登,我只是为了更具体地编辑了它。所以,再次给出示例数据和期望的结果