Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个简单的合并选择查询有什么问题?(mysql)_Mysql_Sql_Select_Coalesce_Null Coalescing Operator - Fatal编程技术网

这个简单的合并选择查询有什么问题?(mysql)

这个简单的合并选择查询有什么问题?(mysql),mysql,sql,select,coalesce,null-coalescing-operator,Mysql,Sql,Select,Coalesce,Null Coalescing Operator,我有一个疑问: SELECT COALESCE(CONCAT(Ar.usaf, '-', Ar.wban),"NONE") AS TABLE_NAME FROM `metadata`.`ISH-HISTORY_HASPOS` A INNER JOIN `metadata`.`Artificial` Ar ON (Ar.id = A.mergeId) WHERE A.usaf = usaf AND A.wban = wban; 当没有连接发生并且结果为NULL时,我希望

我有一个疑问:

SELECT
    COALESCE(CONCAT(Ar.usaf, '-', Ar.wban),"NONE") AS TABLE_NAME
FROM
    `metadata`.`ISH-HISTORY_HASPOS` A
 INNER JOIN `metadata`.`Artificial` Ar ON (Ar.id = A.mergeId)
WHERE
    A.usaf = usaf
AND A.wban = wban;
当没有连接发生并且结果为NULL时,我希望查询将NULL结果与“NONE”合并,但是我仍然得到NULL。 我如何使其返回“NONE”而不是NULL

我忘了解释一个重要的问题:
usaf
wban
存储过程中的
变量。
这是我的最终(工作)版本。谢谢罗兰多

BEGIN
SET @usaf = usaf;
SET @wban = wban;

SELECT
    COALESCE(CONCAT(Ar.usaf, '-', Ar.wban),"NONE") AS TABLE_NAME
FROM
    `metadata`.`ISH-HISTORY_HASPOS` A
 INNER JOIN `metadata`.`Artificial` Ar ON (Ar.id = A.mergeId AND    A.usaf = @usaf AND A.wban = @wban)
LIMIT 1;

END

查询从不考虑usaf和wban的空值,因为
where
子句:

WHERE A.usaf = usaf AND A.wban = wban;
当这些列为空时,将过滤掉该行。这甚至适用于同义反复
a.usaf=a.usaf
。当a.usaf为NULL时,该语句返回FALSE(嗯,NULL)

删除
where
子句,查询可能会按预期工作


作为第二点评论。您想要
内部联接
还是
左侧外部联接

在WHERE子句中提供Ar别名

SELECT
    COALESCE(CONCAT(Ar.usaf, '-', Ar.wban),"NONE") AS TABLE_NAME
FROM
    `metadata`.`ISH-HISTORY_HASPOS` A
 INNER JOIN `metadata`.`Artificial` Ar ON (Ar.id = A.mergeId)
WHERE
    A.usaf = Ar.usaf
AND A.wban = Ar.wban;
看看这个查询,您可以从三(3)个方面进一步改进连接

首先,将WHERE子句元素添加到连接的ON部分

第二,将其设置为左连接,以适应
NULL
情况

SELECT
    COALESCE(CONCAT(Ar.usaf, '-', Ar.wban),"NONE") AS TABLE_NAME
FROM
    `metadata`.`ISH-HISTORY_HASPOS` A
    LEFT JOIN `metadata`.`Artificial` Ar
    ON (Ar.id = A.mergeId) AND A.usaf = Ar.usaf AND A.wban = Ar.wban;
第三,添加这些索引

ALTER TABLE `metadata`.`ISH-HISTORY_HASPOS` ADD INDEX (mergeId,usaf,wban);
ALTER TABLE `metadata`.`Artificial` ADD INDEX (id,usaf,wban);

试试看

如果您能在SQLFIDLE上发布您的模式和查询,这将非常有用-帮助我们帮助您