【发布时间】:2011-09-13 16:54:26
【问题描述】:
我正在寻找一种方法来归档以下内容:
想象一下表 A、B:
答:
aID, aID2, avalue
=================
1 , 10 , 'abc'
2 , 20 , 'def'
3 , 30 , 'ghi'
4 , 40 , 'jkl'
乙:
bID, bID2, bvalue
=================
1 , 10 , 'mno'
20 , 20 , 'pqr'
3 , 1 , 'stu'
现在看看下面的 SQL 语句和结果(我在 Oracle 11 上,但对于 MSSQL 应该是一样的):
从 A LEFT OUTER JOIN B ON (A.aID = B.bID) 中选择 A.*、B.*
aID, aID2, avalue, bID , bID2, bvalue
=====================================
1 , 10 , 'abc' , 1 , 10 , 'mno'
2 , 20 , 'def' , NULL, NULL, NULL
3 , 30 , 'ghi' , 3 , 1 , 'stu'
4 , 40 , 'jkl' , NULL, NULL, NULL
从 A 左外连接 B 中选择 A.*、B.*(A.aID = B.bID 和 A.aID2 = B.bID2)
aID, aID2, avalue, bID , bID2, bvalue
=====================================
1 , 10 , 'abc' , 1 , 10 , 'mno'
2 , 20 , 'def' , NULL, NULL, NULL
3 , 30 , 'ghi' , NULL, NULL, NULL
4 , 40 , 'jkl' , NULL, NULL, NULL
到目前为止还不错。
我正在寻找一个声明(尽可能简单),它可以让我得到以下信息:
MADE-UP-CODE:从 A LEFT OUTER JOIN B ON 中选择 A.*、B.*(A.aID = B.bID 和 A.aID2 = B.bID2 保持匹配列)
aID, aID2, avalue, bID , bID2, bvalue
=====================================
1 , 10 , 'abc' , 1 , 10 , 'mno'
2 , 20 , 'def' , NULL, 20 , NULL (note 20)
3 , 30 , 'ghi' , 3 , NULL, NULL (note 3)
4 , 40 , 'jkl' , NULL, NULL, NULL
有没有办法让这种行为(保持匹配部分,NULL 不匹配“ON”子句和所有值列的部分)只使用连接而不是一遍又一遍地使用自连接?
如果没有像“KEEP MATCHING COLS”这样的密钥世界,你会建议什么方式? 子选择?自加入?
谢谢, 布拉玛
【问题讨论】:
-
由于我对 Stackoverflow 比较陌生,我不知道更好的问题规范属于哪里。我把它放在我的帖子的答案中。谢谢布拉玛
标签: sql database oracle left-join outer-join