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;
select * from (
select 0 as id, 0 as avg_column_val, 0 as row_number
union
select t.id, avg(some_column) as avg_column_val, 1 as row_number
from t_table as t
where t.id = @p_id
group by t.id
order by row_number desc
) as temp
limit 1;
- This needs to be done because **LIMIT clause cannot use variable**.
最终查询**
set @p_counted_rows = 0;
select @p_counted_rows = count(*)
from
t_table as t
where t.id = @p_id;
Set SQL_SELECT_LIMIT = @p_counted_rows + 1;
select * from (
select 0 as id, 0 as avg_column_val, 0 as row_number
union
select t.id, avg(some_column) as avg_column_val, 1 as row_number
from t_table as t
where t.id = @p_id
order by row_number desc
) as temp;
Set SQL_SELECT_LIMIT = Default;
SELECT
CASE WHEN col1 = NULL THEN "NULL" ELSE col1 END AS 'col1'
FROM table1
WHERE
col1 = '012311'
OR col1 = '0123631'
OR col1 = '091233'
OR col1 = '092111'
7条答案
按热度按时间sirbozc51#
根据数据集的不同,有几种方法。下面是一种方法:
不必复制+粘贴,您将不得不调整您的具体情况。
oewdyzsn2#
在MySQL中,如果找不到行,则可以使用IFNULL返回指定值,即当它返回NULL时,例如
您可以在此处看到IFNULL的示例-IFNULL Example
of1yzvn43#
我发现的最好的方法是:
此查询返回2列:
11dmarpk4#
我想补充一下这个+2.5yo的问题,并根据WHERE子句假设Jadeja RJ只想返回四行,而不是整个表(也许表有100,000行,使结果集非常膨胀)。
我不想在SELECT中使用greedy *,所以我将使用
col1
作为行标识符,并使用col2
作为其关联值。当然,可以根据需要指定更多列。下面是一种硬编码所需行数并标记缺失行数的方法:诚然,我的这个建议是基于多个假设的,我不知道表中有多少行,需要声明多少硬编码行,也不知道实际查询中是否有额外的子句/表达式可能会使其效率低下,其优点纯粹是控制返回的行数。
最后,如果标识符数组是由另一个数据库表提供的,那么该表应该替换
hardrows
。woobm2wo5#
使用UNION
“default_value”可以是任何数据类型。
mepcadol6#
我写的是这个问题的一个子场景。我发布了一个解决方案,适用于所有有分组查询的人,他们和我一样困惑于如何实现逻辑**,如果带有WHERE子句的查询在CASE 1和CASE 2中返回NO ROWS**,则有一行具有默认值。我将向您展示一些过滤超过一行的方法。
希望能有所帮助。
用例1
一种方法是在默认值集和从您想要的筛选行中设置之间使用
UNION
运算符。您可以执行以下操作:
1.使用默认值创建SELECT语句。
1.然后将1.中的SELECT语句与所需的QUERYUNION(添加一些WHERE子句、GROUP BY或您想要的任何子句)。出于演示目的,我们将查询id列。
1.添加列row_number,其中默认集合为
row_number = 0
,查询集合为row_number = 1
。1.按row_number列以DESC顺序 * 进行排序(以便始终将筛选的行放在第一位 *:
order by row_number desc
当您LIMIT 1时,您将获得过滤的行
或
当您LIMIT 1时,将获得默认行
用例2
当然,如果希望从WHERE CLAUSE返回更多行,可以执行查询并对结果执行
COUNT(*)
,以检查是否有ANY行。然后您可以限制计数的行数,它将返回它们:* (+1表示@p_count_rows = 0且您希望返回默认值 *)
请注意,您应该将SQL_SELECT_LIMIT设置为您的计数查询(
Set SQL_SELECT_LIMIT = @p_counted_rows + 1;
)-〉这将在不编写LIMIT CLAUSE的情况下限制确切的行数。完成查询后-将SQL_SELECT_LIMIT设置为DEFAULT(Set SQL_SELECT_LIMIT = Default;
)希望这对大家都有帮助。
a8jjtwal7#
这可能与你所寻找的格式一致。如果col1为NULL,则返回一个字符串“NULL”(可以替换)。如果col1为NOT NULL,则返回值结果。