首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果未找到行,则返回默认值

如果未找到行,则返回默认值
EN

Stack Overflow用户
提问于 2014-05-09 14:52:01
回答 5查看 21.9K关注 0票数 9

我正在构建查询以从数据库中搜索多行,如下所示

代码语言:javascript
运行
复制
SELECT 
  * 
FROM
  table1 
WHERE col1 = '012311' 
  OR col1 = '0123631' 
  OR col1 = '091233' 
  OR col1 = '092111' 

在这里,它返回前3个值,因为它们存在于表中,但它不返回最后一个值,因为它不在表中。那么,如果没有找到该值的行,我如何在查询中设置默认值?

EN

回答 5

Stack Overflow用户

发布于 2014-05-09 15:11:44

有几种方法,这些方法取决于数据集。这里有一种方法:

代码语言:javascript
运行
复制
SELECT *, 
IFNULL(
    ( SELECT col1 FROM table1 
        WHERE col1 IN ('012311','0123631','091233','092111') 
    ),
    'some_value'
) AS my_col1
FROM table1;

不一定是copy+paste,您将不得不根据您的特定情况进行调整。

票数 11
EN

Stack Overflow用户

发布于 2014-05-09 17:29:26

在MySQL中,如果找不到行,则可以使用IFNULL返回指定值。

代码语言:javascript
运行
复制
SELECT IFNULL( (SELECT col1 FROM table1 WHERE col1 in (your_list)) ,'default_value_you_want_to_return');

你可以在这里看到IFNULL的例子- IFNULL Example

票数 10
EN

Stack Overflow用户

发布于 2017-01-13 08:48:03

我想附和这个+2.5yo问题,并基于WHERE子句做出假设,即Jadeja RJ只想返回四行,而不是整个表(可能表有100,000行,这使得结果集非常臃肿)。

我不想在SELECT中使用贪婪的*,所以我将使用col1作为行标识符,使用col2作为它的关联值。当然,可以根据需要指定更多列。以下是硬编码所需行数并标记缺少的行数的一种方法:

代码语言:javascript
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23558295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档