【发布时间】:2021-11-09 04:15:42
【问题描述】:
我有两个表,我想要两个表中的所有数据。 如果表具有匹配的 AssetID,则将它们连接到一行。如果没有,那么在单独的行上。 完全外连接听起来是正确的方法,但我在如何根据它来自哪个表来选择键时遇到问题。
TABLE A TABLE B
AssetID | Valuable AssetID | Protected
------------------- -------------------
123 | Yes 123 | Yes
456 | No 321 | No
653 | Yes
目标:
TABLE C
AssetID | Valuable | Protected
---------------------------
123 | Yes |Yes
456 | No |
653 | Yes |
321 | |No
SELECT TableA.AssetID, TableA.Valuable, TableB.Protected
FROM (
SELECT AssetID, Valuable
FROM TableA
) ta
FULL OUTER JOIN (
SELECT AssetID, Protected
FROM TableB
) tb ON ta.AssetID=tb.AssetID
生产
表 C
AssetID | Valuable | Protected
---------------------------
123 | Yes |Yes
456 | No |
653 | Yes |
| |No <<<< PROBLEM
---------------------------
我错过了钥匙
【问题讨论】:
-
注意:您发布的查询有语法错误,您将表别名为
ta和tb,但继续使用 TableA 和 TableB。 -
是的,一切都很好......这是伪代码,所以我没有仔细观察。
-
但是您要确保首先删除了所有错误,否则人们会浪费时间寻找错误的问题。
-
是的,我同意,并感谢您的建议。欣赏它。你们是巫师。
标签: sql sql-server tsql select full-outer-join