我有一个数据表“DT”和一个映射表“MT”如下:
DT表:
ComID - CountryCode
-------------------
1000 US
1001 US
1111 FR
1222 CN
1234 CN
1333 CN
MT表:
CountryCode - Region Name - ComID
----------------------------------
US North America
US America 1001
FR Europe
CN CHINA
CN ASIA 1222
CN ASEAN 1333
我有一个视图,其中包含这两个表以及其他映射表(数据表 LEFT OUTER JOIN与其他映射表)
我想要的是根据国家/地区代码链接两个表格,对于一些我想使用ComID的特殊公司。
我尝试了很少的查询但是每个查询似乎都没有提供解决方案。 以下是我实现这一目标的尝试:
Select DT.*, MT.., ...
FROM DT LEFT OUTER JOIN
MT ON DT.CountryCode = MT.CountryCode AND DT .CC_COMPANY_CODE NOT IN ('1001', '1222', '1333') OR
DT.ComID = MTComID AND DT.ComID IN ('1001', '1222', '1333')
LEFT OUTER JOIN ... other tables ... LEFT OUTER JOIN ... other tables ...
前一个将返回两个条件适用的行:
CN - CHINA - 1234
CN - ASIA - 1222
CN - ASEAN - 1333
我尝试了类似这样的东西,但它会返回一个语法错误,解决方案应该是这个,但我似乎无法找到它。
Select DT.*, MT.., ...
FROM DT LEFT OUTER JOIN
MT ON DT.CountryCode = MT.CountryCode WHERE (DT .CC_COMPANY_CODE NOT IN ('1001', '1222', '1333')) OR
ON DT.ComID = MTComID WHERE (DT.ComID IN ('1001', '1222', '1333'))
LEFT OUTER JOIN ... other tables ...
答案 0 :(得分:2)
这是一种方法。
SELECT DT.CompID,DT.CountryCode,MT.RegionName
FROM DT
JOIN MT
ON MT.CompID IS NOT NULL AND MT.CompID = DT.CompID
UNION
SELECT DT.CompID,DT.CountryCode,MT.RegionName
FROM DT
JOIN MT
ON MT.CompID IS NULL AND MT.CountryCode = DT.CountryCode
WHERE NOT EXISTS (SELECT TOP 1 1 FROM MT WHERE CompID = DT.CompID)
尽量不要将CompID硬编码为逻辑的一部分,因为它不会成为未来的证据。