作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望根据参与连接的所有表中存在的一组列来连接两个(或更多)表。换句话说,我希望根据列的交集来连接表。但是,每个表都有该表独有的额外列。
#:一个数字
-:NULL
表A
+------+------+------+
| Col1 | Col2 | ColA |
+------+------+------+
| A | A | # |
| A | B | # |
+------+------+------+
表B
+------+------+------+
| Col1 | Col2 | ColB |
+------+------+------+
| A | A | # |
| B | B | # |
+------+------+------+
结果
+------+------+------+------+
| Col1 | Col2 | ColA | ColB |
+------+------+------+------+
| A | A | # | # |
| A | B | # | - |
| B | B | - | # |
+------+------+------+------+
我已经想出了一个解决方案,但性能很糟糕,性能是一个问题。我不想让这个解决方案污染你。我宁愿有新的眼光来看待这个:)
期待看到您的解决方案。感谢您的时间。非常感谢。
谢谢大家的回复。但我似乎没有很好地解释这个问题。 (尚未测试所有答案)
但请注意表 B 中有一行在表 A 中不存在。
Table B
+------+------+------+
| Col1 | Col2 | ColB |
+------+------+------+
| B | B | # |
+------+------+------+
表 A 反之亦然。
我提出的解决方案将所有表在列的交集上联合在一起以生成骨架。
Skeleton:
SELECT Col1, Col2 FROM TableA
UNION
SELECT Col1, Col2 FROM TableB
一旦我有了骨架,我就为每个表留下了外部连接。
LEFT OUTER JOIN TableA AS a ON a.Col1=skeleton.Col1 AND a.Col2=skeleton.Col2
LEFT OUTER JOIN TableB AS b ON b.Col1=skeleton.Col1 AND b.Col2=skeleton.Col2
所以最终的查询如下所示
SELECT s.*, a.ColA, b.ColB
FROM
(
SELECT Col1, Col2
FROM TableA
UNION
SELECT Col1, Col2
FROM TableB
) s
LEFT OUTER JOIN TableA a ON a.Col1=s.Col1 AND a.Col2=s.Col2
LEFT OUTER JOIN TableB b ON b.Col1=s.Col1 AND b.Col2=s.Col2
最佳答案
正是完全外部联接
的东西:
select coalesce(a.Col1, b.Col1) as Col1
. coalesce(a.Col2, b.Col2) as Col2
, a.ColA
, b.ColB
from A a
full outer join
B b
on a.Col1 = b.Col1
and a.COl2 = b.Col2
关于sql-server - 连接表 ON A ∩ B 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11003657/
我是一名优秀的程序员,十分优秀!