如果存在,请从另一个表中选择列

时间:2018-08-30 20:17:46

标签: sql

我需要帮助解决此问题。我有两个桌子:

表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

3 个答案:

答案 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 );

SQL Fiddle Demo

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 );

SQL Fiddle Demo 2

MySQL 除外,因为存在另一种情况,其中 该代码存在于Table2中,但不存在于Table1 full outer join提供了解决方案(特别感谢@ Error_2646)。