用SQL Server中的2表替换数据

时间:2016-04-19 10:09:11

标签: sql sql-server

我的问题是用SQL Server中的密钥替换。任何人都可以给我一个查询吗?

感谢您的回答!

Table1

    ID | Code | Des | more columns
    ---+------+-----+-------------
    1  | 100  | a   | ...
    2  | 200  | b   | ...
    3  | 300  |data3| ... 

Table2

    ID | Code | Des 
    ---+------+------
    1  | 100  | data1   
    2  | 200  | data2   

结果必须是:

    ID | Code | Des | more columns
    ---+------+-----+-------------
    1  | 100  |data1| ...
    2  | 200  |data2| ...
    3  | 300  |data3| ... 

4 个答案:

答案 0 :(得分:2)

使用JOIN

<强>查询

SELECT t1.ID, t1.Code, 
CASE WHEN t1.Des LIKE 'data%' THEN t1.Des ELSE t2.Des END AS Des
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.ID = t2.ID;

答案 1 :(得分:2)

执行LEFT JOIN,如果没有table2.Des值,请改用table1.Des:

select t1.ID, t1.Code, coalesce(t2.Des, t1.Des), t1.more Column
from table1 t1
left join table2 t2 on t1.code = t2.code

或者,也许你想要这个:

select * from table2
union all
select * from table1 t1
where not exists (select 1 from table2 t2
                  where t2.code = t1.code)

即。返回table2行,如果代码在table1中而不在table2中,则返回该行。

答案 2 :(得分:2)

试试这个:

SELECT          Table1.ID,
                Table1.Code,
                ISNULL(Table2.Des, Table2.Des) AS Des
FROM            Table1
LEFT OUTER JOIN Table2
             ON Table1.Code = Table2.Code;

你说“如果代码在2表中常见”那么加入代码而不是ID

答案 3 :(得分:0)

好的,所以你想要Table1的所有结果,但要使用&#39; Des&#39;中的值。什么时候可以从Table2获得?你想做这样的事情;

null