如果数据集为空,MySQL将返回默认值
我正在尝试使用以下方法查询数据库:如果数据集为空,MySQL将返回默认值,mysql,r,select,coalesce,Mysql,R,Select,Coalesce,我正在尝试使用以下方法查询数据库: SELECT coalesce(value, "NA") as value FROM mytable FORCE INDEX (chrs) FORCE INDEX (sites) WHERE chrom = 1 AND site = 120 如果我在数据库中有一个条目,这个查询就可以正常工作。但是,如果找不到条目,它将返回一个空数据集。我想更改查询,以便如果在数据库表中找不到它,它仍将返回某种值(用于“value”),而不是一个空的数据集添加一个联合如何
SELECT coalesce(value, "NA") as value
FROM mytable FORCE INDEX (chrs) FORCE INDEX (sites)
WHERE chrom = 1 AND site = 120
如果我在数据库中有一个条目,这个查询就可以正常工作。但是,如果找不到条目,它将返回一个空数据集。我想更改查询,以便如果在数据库表中找不到它,它仍将返回某种值(用于“value”),而不是一个空的数据集添加一个联合如何
( SELECT coalesce(value, "NA") as value
FROM mytable FORCE INDEX (chrs) FORCE INDEX (sites)
WHERE chrom = 1 AND site = 120
)
UNION ALL
( SELECT 'NA' as value
FROM mytable
WHERE NOT EXISTS
( SELECT coalesce(value, "NA") as value
FROM mytable FORCE INDEX (chrs) FORCE INDEX (sites)
WHERE chrom = 1 AND site = 120
)
)
或者,如果您想执行一次合并,这样您就可以更容易地更改返回的部分(如果为null),您可以像这样从中进行选择
SELECT COALESCE(value, "NA") as value
FROM
(
( SELECT value
FROM mytable FORCE INDEX (chrs) FORCE INDEX (sites)
WHERE chrom = 1 AND site = 120
)
UNION ALL
( SELECT NULL as value
FROM mytable
WHERE NOT EXISTS
( SELECT value as value
FROM mytable FORCE INDEX (chrs) FORCE INDEX (sites)
WHERE chrom = 1 AND site = 120
)
)
) t
一种(丑陋的)方法:创建一个只有一行的表(与该表中的数据无关),然后使用:
SELECT coalesce(m.value, "NA") from oneline left join mytable m on m.chrom=1 and m.site=120;
以下是您得到的:
mysql> select * from oneline;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0,00 sec)
mysql> select * from mytable;
+-------+-------+------+
| value | chrom | site |
+-------+-------+------+
| test | 1 | 120 |
+-------+-------+------+
1 row in set (0,00 sec)
mysql> SELECT coalesce(m.value, "NA") from oneline left join mytable m on m.chrom=1 and m.site=120;
+-------------------------+
| coalesce(m.value, "NA") |
+-------------------------+
| test |
+-------------------------+
1 row in set (0,00 sec)
mysql> SELECT coalesce(m.value, "NA") from oneline left join mytable m on m.chrom=1 and m.site=119;
+-------------------------+
| coalesce(m.value, "NA") |
+-------------------------+
| NA |
+-------------------------+
1 row in set (0,00 sec)
你能发布一些相关数据吗?