如果两个不同的表中没有匹配,则SQL查询返回列的默认值

时间:2018-02-15 13:48:23

标签: mysql sql

我需要创建一个匹配两个表的输出表。如果第二个表与第一个表不匹配,则返回列的默认值。

示例 -

表1 -

|---------------------|------------------|
|          Id         |        Name      |
|---------------------|------------------|
|          1          |        Jon       |
|---------------------|------------------|
|          2          |        Dan       |
|---------------------|------------------|
|          3          |        Mark      |
|---------------------|------------------|
|          4          |      Phillips    |
|---------------------|------------------|
|          5          |       Watson     |
|---------------------|------------------|

表2 -

|---------------------|------------------|
|          Name       |      Result      |
|---------------------|------------------|
|          Jon        |       Pass       |
|---------------------|------------------|
|        Phillips     |       Pass       |
|---------------------|------------------|
|         Watson      |       Fail       |
|---------------------|------------------|

带有连接的最终输出表,如果数据在第二个表中不匹配,则为其分配默认值“失败” -

|---------------------|------------------|------------------|
|          Id         |        Name      |      Result      |
|---------------------|------------------|------------------|
|          1          |        Jon       |       Pass       |
|---------------------|------------------|------------------|
|          2          |        Dan       |       Fail       |
|---------------------|------------------|------------------|
|          3          |        Mark      |       Fail       |
|---------------------|------------------|------------------|
|          4          |      Phillips    |       Pass       |
|---------------------|------------------|------------------|
|          5          |       Watson     |       Fail       |
|---------------------|------------------|------------------|

如何在SQL中实现这一目标。

1 个答案:

答案 0 :(得分:2)

使用table2左连接table1并使用coalesce将NULL值(当右表没有匹配时)替换为默认值:

select t1.id, 
       t1.name, 
       coalesce(t2.result, 'fail') as Result      
from Table_1 as t1
left outer join Table_2 as t2 on t1.name = t2.name