SQL在多个列上左联接

时间:2018-08-27 22:41:02

标签: sql left-join

我有两个表,如下所示:

第一个表用于存储值:

id | column1 | column2
-----------------------
1  | aaa     | xxx
1  | aaa     | yyy
1  | bbb     | zzz

第二个表用于存储转换后的值:

id | old      | new
-----------------------
1 | aaa       | ooo
1 | yyy       | ppp

,结果应为

id | column1 | column2
-----------------------
1  | ooo     | xxx
1  | ooo     | ppp
1  | bbb     | zzz

有没有办法使这项工作成功?

1 个答案:

答案 0 :(得分:1)

Column1和Column2应该分开连接。如果没有匹配的转换,也应使用ISNULL或COALESCE。下面是一个示例(提琴:http://sqlfiddle.com/#!18/160f0/3/0

CREATE TABLE ValuesTable (
    Column1 varchar(3),
    Column2 varchar(3)
);

INSERT INTO ValuesTable (Column1, Column2) VALUES
('aaa', 'xxx'), ('aaa', 'yyy'), ('bbb', 'zzz');

CREATE TABLE TranslationTable (
    Old varchar(3),
    New varchar(3)
);

INSERT INTO TranslationTable (Old, New) VALUES
('aaa', 'ooo'), ('yyy', 'ppp');

SELECT ISNULL(c1.New, Column1), ISNULL(c2.New, Column2) FROM ValuesTable 
LEFT JOIN TranslationTable c1 ON c1.Old = Column1
LEFT JOIN TranslationTable c2 ON c2.Old = Column2