我需要帮助解决此问题。我有两个桌子:
表1
MonthYear Code Value
jan/18 4169 50
jan/18 4102 95
表2
Date Code Value
jan/18 4102 30
jan/18 4102 10
jan/18 4102 15
jan/18 4102 40
我需要进行查询,如果表2中没有代码,则返回表1的值字段,或者如果表2中存在代码,则返回表2的值字段。
例如:
MonthYear Code Value
jan/18 4169 50
jan/18 4102 30
jan/18 4102 10
jan/18 4102 15
jan/18 4102 40
答案 0 :(得分:1)
我会这样处理:
select t2.date, t2.code, t2.value
from table2 t2
union all
select t1.date, t1.code, t1.value
from table2 t1
where not exists (select 1 from table2 t2 where t1.date = t2.date and t1.code = t2.code);
答案 1 :(得分:1)
SELECT * FROM table2
UNION ALL
SELECT * FROM table1 WHERE Code NOT IN (SELECT Code FROM table2)
答案 2 :(得分:1)
您可以使用coalesce
:
select t1.MonthYear,
coalesce(t2.Code,t1.Code) as Code,
coalesce(t2.value,t1.value) as value
from table2 t2
right outer join table1 t1
on ( t2.Code = t1.Code );
P.S。我为演示选择了 PostGreSQL 作为 DB ,您也可以将此SQL用于 Oracle , SQL-Server 或 MySQL 。
实际上,您最好在SQL中用right
将关键字full
替换为:
select coalesce(t2.MonthYear,t1.MonthYear) as MonthYear,
coalesce(t2.Code,t1.Code) as Code,
coalesce(t2.value,t1.value) as value
from table2 t2
full outer join table1 t1
on ( t2.Code = t1.Code );
MySQL 除外,因为存在另一种情况,其中 该代码存在于Table2中,但不存在于Table1 ,full outer join
提供了解决方案(特别感谢@ Error_2646)。