如何更改此查询,以便在select(*)计数值为2时返回true?

问题描述 投票:0回答:2

我不是很喜欢SQL而且我有以下疑问。我有这个查询(我正在使用MySql):

SELECT count(*)                                AS exist
FROM MeteoForecast                             AS MF                         
WHERE 
     MF.localization_id = 22
AND
     DATE(MF.start_date) = DATE('2019/03/02') 

将记录数作为存在字段返回到MeteoForecast表中。

我想以这种方式修改它:

如果count(*)的值等于2,则返回true(exists字段为true),否则exists字段值为false。

我该如何实现这种行为?

mysql sql database rdbms
2个回答
1
投票

你可以使用一个布尔表达式:

SELECT (count(*) = 2) AS exist2
FROM MeteoForecast mf                       
WHERE MF.localization_id = 22 AND
      DATE(MF.start_date) = DATE('2019-03-02') ;

该表达式实际上返回true为“1”,false为“0”。这些是MySQL中真实和假的布尔数的等价数字。

假设start_date有一个时间组件,你应该把它写成:

SELECT (count(*) = 2) AS exist2
FROM MeteoForecast mf                       
WHERE MF.localization_id = 22 AND
      MF.start_date >= '2019-03-02' AND
      MF.stara_date < '2019-03-03' ;

这可以利用MeteoForecast(localization_id, start_date)上的索引,因此它可以更快。


1
投票

你也可以使用case表达式

SELECT case when count(*)=2 then true
else false end   AS exist
FROM MeteoForecast as MF                         
WHERE 
     MF.localization_id = 22
AND
     DATE(MF.start_date) = DATE('2019/03/02')
© www.soinside.com 2019 - 2024. All rights reserved.