我有一张表" CODE"," DATA"列和表格包含"旧代码"," NEW-CODE"用于将旧代码映射到新代码的列。 我需要执行Join以获取具有新代码的数据,但仅限于可用的地方,否则我需要保留旧代码。 有没有办法做类似" LEFT JOIN或SELF"为了在匹配失败的情况下设置连接左侧的值?
CODE DATA
- -
A 30
B 34
C 5
D 10
这是第二个表
OLD CODE NEW CODE
B Ba1
C Ca2
D Da3
现在预期的结果将是来自第一个表的DATA,如果可用,则使用新代码。否则就是旧代码。
CODE DATA
A 30
Ba1 34
Ca2 5
Da3 10
答案 0 :(得分:1)
如果新代码不存在,请使用LEFT OUTER JOIN
以获取旧代码
SELECT
IIF(s.newcode IS NULL, f.Code, s.newcode) AS Code,
f.DATA
FROM FirstTable f
LEFT OUTER JOIN SecodTable s ON s.OLDCODE = f.CODE
答案 1 :(得分:0)
可能不是最好的方法,但它应该有效:
SELECT
t2.new_code
FROM
Table1 t1 INNER JOIN Table2 t2 ON t1.code=t2.old_code
UNION ALL
SELECT
code
FROM
Table1
WHERE
code NOT IN (SELECT old_code FROM Table2);
问题在于,如果您的需求发生变化,您将有2 SELECT
个陈述来维护。