SQL 用于连接 2 个表,但我的理解有点复杂

SQL for joining 2 tables but a bit complicated for my understanding

遇到了一个有点超出我理解范围的情况。

Table A 有产品、国家和工厂 Table B 有产品、工厂和城市。

场景是销售预测数据从国家级流经工厂,然后流向城市级。我们仅在鹿特丹和阿姆斯特丹设有工厂。问题是 Table A 中的工厂需要与 table B 中的工厂相同。

我必须为 Table A 中的工厂错误并需要清理的情况 C&D 清理数据。因此,我首先需要识别这些错误记录:

这是我通过加入 Table A 和 B

得到的结果

select A.Prod,A.country,A.factory,B.Prod,B.factory,B.City来自 Table1 A,Table2 B 其中 A.Prod=B.Prod 和 A.Factory <>B.Factory

当然我可以使用下面的SQL找到特定的已知错误记录,但我需要在不指定任何产品或

的情况下查找所有错误记录

select A.Prod,A.country,A.factory,B.Prod,B.factory,B.City来自 Table1 A,Table2 B,其中 A.Prod=B.Prod 和 A.Factory <>B.Factory 和 A.Country ='Norway' 和 A.Factory ='Rotterdam' 和 B.City ='Oslo'

情况一

Table一个

产品国家工厂
ProdA 瑞士鹿特丹

TableB

产品工厂城市
ProdA 鹿特丹日内瓦

情况 2

Table一个

产品国家工厂
Prod 德国鹿特丹

TableB

产品工厂城市
ProdB 鹿特丹德累斯顿

情况三

Table一个

产品国家工厂
ProdC 挪威鹿特丹

TableB

产品工厂城市
ProdC 阿姆斯特丹奥斯陆

情况 4

Table一个

产品国家工厂
ProdD 芬兰鹿特丹

TableB

产品工厂城市
ProdD 阿姆斯特丹赫尔辛基

据我了解,您对 Table A 国家/地区的预测必须是 table B 地区的城市,该城市存在于 table A 国家/地区。

因此,在情况 1 中,我们有 Table A 国家 = 瑞士,Table B 城市 = 日内瓦。 因为,日内瓦在瑞士,这很好 在情况 2 中,我们有 TableA国=德国,TableB市=德累斯顿 因为德累斯顿在德国,所以很好。

这为我们提供了解决问题的线索。

第 1 步。为您的预期 country/city

设置 table
CREATE TABLE COUNTRY_CITY (COUNTRY VARCHAR(60), CITY VARCHAR(60));

第 2 步。将预期 country/city 的值插入 table

INSERT INTO COUNTRY_CITY(COUNTRY,CITY) VALUES('GERMANY','DRESDEN');
INSERT INTO COUNTRY_CITY(COUNTRY,CITY) VALUES('SWITZERLAND','GENEVA');
INSERT INTO COUNTRY_CITY(COUNTRY,CITY) VALUES('NORWAY','OSLO');
INSERT INTO COUNTRY_CITY(COUNTRY,CITY) VALUES('FINLAND','HELSINKI');

第 3 步

select A.Prod,A.country, A.factory, B.Prod, B.factory, B.City,
       COUNTRY_CITY.CITY
from 
Table1 A
INNER JOIN Table2 B ON A.Prod=B.Prod 
INNER JOIN COUNTRY_CITY ON A.COUNTRY = COUNTRY_CITY.COUNTRY
where  COUNTRY_CITY.CITY = B.city and A.Factory <> B.Factory

所以在第 3 步中,我们向数据库提供了哪个城市属于哪个国家的信息,这样我们就可以进行从 Table A 到 table B 的连接。一旦你得到, 那么不匹配工厂的条件应该是你要找的记录