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

时间:2019-03-02 16:46:06

标签: mysql sql database rdbms

我不太喜欢SQL,我有以下疑问。我有此查询(我正在使用MySql):

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

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

我想用这种方式修改它:

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

如何实现这种行为?

2 个答案:

答案 0 :(得分: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中布尔值 true false 的数值等效项。

假设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 :(得分:1)

您还可以使用大小写表达式

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')