我有两个表X和Y.i在表X中有两个颜色,即A和B以及表Y中的颜色C. 现在我想使用左连接和ON条件连接X和Y. X.a = y.c或X.b = y.c。我希望在表Y中获得'c'coloumn的行,分别表X中的'a'coloumn和表Y中的'c'cOLOUMN,表X中的B'coloumn行。
结果应该是:
-----------------------
X.a Y.C X.B Y.C
1 1 5 5
2 2 10 10
3 3 20 20
NULL NULL NULL NULL
答案 0 :(得分:0)
SELECT X.a, X.b, Y.c
FROM X LEFT JOIN Y
ON X.a = Y.c OR X.b = Y.c
你的问题在哪里?
问题是不知道sql语法?否则你可能没有正确构建你的问题陈述
根据您的评论,我假设您想知道哪个匹配项是检索的值,修改后的查询是:
SELECT X.a, X.b, Y.c,
CASE WHEN (X.a = Y.c AND X.b != Y.c) THEN 'a'
WHEN (X.a != Y.c AND X.b = Y.c) THEN 'b'
WHEN (X.a = Y.c AND X.b = Y.c) THEN 'ab' END AS 'FromColumn'
FROM X LEFT JOIN Y
ON X.a = Y.c OR X.b = Y.c
答案 1 :(得分:0)
你可以简单地这样做
SELECT x.a, y1.c ac, x.b, y2.c bc
FROM x
LEFT JOIN y y1 ON x.a = y1.c
LEFT JOIN y y2 ON x.b = y2.c
示例输出:
| A | AC | B | BC | |--------|--------|--------|--------| | 1 | 1 | 5 | 5 | | 2 | 2 | 10 | 10 | | 3 | 3 | 20 | 20 | | (null) | (null) | (null) | (null) |
这是 SQLFiddle 演示