首页 > 解决方案 > SQL在匹配时加入2个表,然后在表3中查找缺失值

问题描述

表 1(总公司地址)

Office | City | Country2Letter | Country3Letter | Address

US Chicago West Wacker | Chicago | US | USA | 111 West Wacker

US New York 11 Madison | New York | US | USA | 11 S Madison

US Detroit Jefferson Ave | Detroit | US | USA | 24 Jefferson Ave

表2(有些Office是正确的,有些不是)

SamAccountName | Office | BrandCode

dsmith | US Chicago West Wacker | RES

jdoe | US New York 11 Madison | DIG

msmith | US Detroit Jefferson Ave | DIG

表3

DLName | OfficeName | BrandCode

US Chicago West Wacker | US Chicago West Wacker | RES

US New York 11 Madison | US New York 11 Madison | DIG

因此,我想确保 OfficeName 来自主 Table1 并包含来自 Table2 的任何匹配的个人。然后我想显示表 3 中没有带有该 OfficeName 的 BrandCode 的任何缺失项目。

标签: sql

解决方案


首先,避免使用 OfficeName 作为列。引用应该是 officeId,这将允许更好的查询性能。

你的查询会有点像这样

select table2.* from table1 t1 join table2 t2 on t1.officeId=t2.officeId
select table3.* from table3 t3 where t3.officeId not in (<query above>)

推荐阅读