如何使用联接来交叉检查来自多个表的数据

时间:2018-02-20 08:14:07

标签: sql sql-server join

我有几个表需要查询以交叉检查信息。 所有表都在同一个数据库中。

第一个表名为Confirmedsitesv2,包含一个名为sites的列。

Sedond表名为Standardwithmail,包含三列。网站,用户名和邮件。

名为CDDump的第三个表包含很多列,但只有三个我感兴趣.Uid,employeenddate和company。

我需要查询,以便根据以下条件获取网站,用户名和邮件。

来自standardwithmail的网站在confirmedsitesv2中匹配网站,来自standardwithmail的用户名与CDDUmp中的uid匹配,而employmentenddate = 0且公司不像%test%。邮件不应与任何内容匹配,因为它只出现在standardwithmail中,但会显示查询中的所有匹配。

所以我试着用左连接近两个小时来解决这个问题。

任何有经验的人都可以解释我应该如何使用加入这种情况?我之前完成了外部联接以获得完全不同的情况,而且工作简单而且很好,但即使在谷歌很多时间之后也无法解决这个问题。

如果需要,我可以创建一些假表并上传图片,因为我无法在这里显示真实数据。

3 个答案:

答案 0 :(得分:0)

请试试这个:

SELECT cfrsites.sites standard.username, 
       standard.mail 
FROM   Confirmedsitesv2 cfrsites, 
       Standardwithmail standard, 
       CDDump cd 
where  cfrsites.sites = standard.site 
       and standard.username = cd.Uid 

如果您可以编辑帖子,请添加表格结构并添加一些有用的插入语句

答案 1 :(得分:0)

那么为什么邮件不起作用是因为它在我只用于其他信息的大表中,我在standardwithmail中重命名该列并运行:

select site, username, mailaddress
from Standardwithmail
left join CDDump on CDDump.uid = dbo.Standardwithmail.Username where Site in (select Site from Confirmedsitesv2) and employmentEnd like '0' and companyName not like '%test%'
order by Site;

答案 2 :(得分:0)

尝试以下查询。您不需要外部联接或左联接,但只需要内部联接,因为您只需要匹配记录。

SELECT     swm.username, 
                    swm.mail 
FROM       standardwithmail swm
INNER JOIN confirmedsitesv2 csv2
     ON   swm.sites = csv2.sites
  INNER JOIN cddump cdd 
      ON   swm.username = cdd.uid
  WHERE cdd.employmentenddate = 0
       AND   
       cdd.company NOT LIKE  '‰test‰'