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
答案 0 :(得分:4)
您可以使用Mysql COALESCE
函数。它将在参数列表中返回第一个非null参数:
所以你的代码看起来像:
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
答案 1 :(得分: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;