我有几个表需要查询以交叉检查信息。 所有表都在同一个数据库中。
第一个表名为Confirmedsitesv2,包含一个名为sites的列。
Sedond表名为Standardwithmail,包含三列。网站,用户名和邮件。
名为CDDump的第三个表包含很多列,但只有三个我感兴趣.Uid,employeenddate和company。
我需要查询,以便根据以下条件获取网站,用户名和邮件。
来自standardwithmail的网站在confirmedsitesv2中匹配网站,来自standardwithmail的用户名与CDDUmp中的uid匹配,而employmentenddate = 0且公司不像%test%。邮件不应与任何内容匹配,因为它只出现在standardwithmail中,但会显示查询中的所有匹配。
所以我试着用左连接近两个小时来解决这个问题。
任何有经验的人都可以解释我应该如何使用加入这种情况?我之前完成了外部联接以获得完全不同的情况,而且工作简单而且很好,但即使在谷歌很多时间之后也无法解决这个问题。
如果需要,我可以创建一些假表并上传图片,因为我无法在这里显示真实数据。
答案 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‰'