我有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
取值
现在我想只获取来自Test1Update表的匹配记录和来自
的所有不匹配记录Test1 table so final output will be
id name address
1 john Las Vegas
2 mary La
这意味着只要有匹配就应该重新列入旧条目 在Test1Update中找到。
如何使用选择查询或按程序执行此操作?
告诉我某种方式。
答案 0 :(得分: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为您提供了第一个非null参数,因此您可以获得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;