我正在构建查询以从数据库中搜索多行,如下所示
SELECT
*
FROM
table1
WHERE col1 = '012311'
OR col1 = '0123631'
OR col1 = '091233'
OR col1 = '092111' 在这里,它返回前3个值,因为它们存在于表中,但它不返回最后一个值,因为它不在表中。那么,如果没有找到该值的行,我如何在查询中设置默认值?
发布于 2014-05-09 15:11:44
有几种方法,这些方法取决于数据集。这里有一种方法:
SELECT *,
IFNULL(
( SELECT col1 FROM table1
WHERE col1 IN ('012311','0123631','091233','092111')
),
'some_value'
) AS my_col1
FROM table1;不一定是copy+paste,您将不得不根据您的特定情况进行调整。
发布于 2014-05-09 17:29:26
在MySQL中,如果找不到行,则可以使用IFNULL返回指定值。
SELECT IFNULL( (SELECT col1 FROM table1 WHERE col1 in (your_list)) ,'default_value_you_want_to_return');你可以在这里看到IFNULL的例子- IFNULL Example
发布于 2017-01-13 08:48:03
我想附和这个+2.5yo问题,并基于WHERE子句做出假设,即Jadeja RJ只想返回四行,而不是整个表(可能表有100,000行,这使得结果集非常臃肿)。
我不想在SELECT中使用贪婪的*,所以我将使用col1作为行标识符,使用col2作为它的关联值。当然,可以根据需要指定更多列。以下是硬编码所需行数并标记缺少的行数的一种方法:
SELECT hardrows.col1,IFNULL(table1.col2,'Not Found')
FROM
(
(SELECT '012311' AS `col1`) UNION
(SELECT '0123631') UNION
(SELECT '091233') UNION
(SELECT '092111')
) AS `hardrows`
LEFT JOIN `table1`
ON hardrows.col1=table1.col1;诚然,我对这个建议有多个假设。我不知道表中有多少行,需要声明多少硬编码的行,也不知道实际查询中是否有额外的子句/表达式可能会使其效率低下。它的优势完全在于控制返回的行数。
最后,如果标识符数组是由另一个数据库表提供的,那么该表应该替换hardrows。
https://stackoverflow.com/questions/23558295
复制相似问题