MYSQL:如果存在,则从表B中选择列,否则从表A中选择

标签 mysql select

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

最佳答案

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

所以你的代码看起来像这样:

 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

关于MYSQL:如果存在,则从表B中选择列,否则从表A中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19957769/

相关文章:

MySql,在 60 秒以下时显示正确的视频持续时间时出现问题

php - mysql SELECT 查询以正确的语法返回错误

select - Sublime Text 3 : Keep entire lines selected when indenting with tab

sql - 如何获取oracle sql中指定位置具有特定字符的记录

php - Real_escape_string 阻止 INSERT 语句工作 MYSQL PHP

mysql - bool 值的 Postgres 和 MySql 之间的返回值差异

mysql - 如何将 mysql 指针转换为 unsigned long

mysql - mariadb 已报告错误 "end if"

mysql - 我如何计算 customer_id,其中 store_id 计数超过 1

php - select 查询和 while 循环未正确返回所有行