1

我有 2 个表 Test1 和 Test1Update 具有以下结构

Test1
id  name address

Test1Update 
id name address

这里 Test1 是旧表,而 Test1Update 只是 Test1 表的副本我想在这种情况下获取记录,

if(Test1.id=Test1Update.id){

select macthing values from Test1Update tables,and remaining unmatched values from Test1 table
}
else if(Test1.id!=Test1Update.id)
{
select * from Test1 only
}

举个例子

Test1 有类似的数据

Test1
id  name   address
1   john    Ca
2   mary    La

and Test1Update has data like

id  name  address
1   john  Las Vega

s

现在我只想从 Test1Update 表中获取匹配的记录,并从表中获取所有不匹配的记录

Test1 table so final output will be

 id  name  address
 1   john  Las Vegas
 2   mary    La

这意味着只要找到与 Test1Update 的任何匹配项,就应该替换旧条目。

如何使用选择查询或通过过程来做到这一点?

告诉我一些方法。

4

1 回答 1

2

假设 Test1Update 中的所有 id 都存在于 Test1中,这可以简单地完成:

SELECT
  TEST1.ID,
  COALESCE(TEST1UPDATE.NAME, TEST1.NAME) as NAME,
  COALESCE(TEST1UPDATE.ADDRESS, TEST1.ADDRESS) as ADDRESS
FROM TEST1
LEFT JOIN TEST1UPDATE ON TEST1.ID = TEST1UPDATE.ID

在这里看到它的工作:http ://sqlfiddle.com/#!3/4a1f2/3/0

使用 LEFT JOIN,如果 TEST1UPDATE 中没有匹配的条目,则 TEST1UPDATE.NAME 和 TEST1UPDATE.ADDRESS 为空。 COALESCE为您提供了第一个非空参数,因此您从 TEST1UPDATE 中获得了值(如果存在),否则从 TEST1 中获得。


编辑 UNION 解决方案:

如果有很多字段,COALESCE 解决方案可能有点冗长,您想使用 UNION:

SELECT *
FROM TEST1UPDATE
INNER JOIN TEST1 ON TEST1.ID = TEST1UPDATE.ID

UNION

SELECT *
FROM TEST1
LEFT JOIN TEST1UPDATE ON TEST1.ID = TEST1UPDATE.ID
WHERE TEST1UPDATE.ID IS NULL;
于 2012-06-15T13:22:10.373 回答