0
Table A
Name      Value
John      1
Mary      2
Gary      3

Table B
Name      Value
Jim       10
Jason     20
Mary      30

我想要表 A 中的名称和值,但如果表 B 中存在则覆盖值。所以我的预期输出是:

John,1
Mary,30
Gary,3

我正在尝试类似的东西:

SELECT A.Name, IF(EXISTS(B.Value),B.Value,A.Value) FROM Table A LEFT JOIN Table B on B.Name=A.Name
4

2 回答 2

4

您可以为此使用 MysqlCOALESCE函数。它将返回参数列表中的第一个非空参数:

所以你的代码看起来像:

 SELECT A.Name, 
        coalesce(B.Value,A.Value) 
 FROM Table A LEFT JOIN Table B on B.Name=A.Name

所以会发生的是,如果表 B 中有一个值,则将使用该值,如果没有,它将恢复为 A。

请参阅文档:http ://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

于 2013-11-13T15:31:51.377 回答
2

试试这个:

SELECT 
  A.Name,
  CASE WHEN b.Name IS NULL THEN a.Value ELSE b.value END AS value
FROM TableA  AS a
LEFT JOIN TableB AS b on B.Name=A.Name;

SQL 小提琴演示

于 2013-11-13T15:31:19.310 回答