我不太喜欢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(existing字段为true),否则existing字段值为false。

如何实现这种行为?

最佳答案

您可以只使用布尔表达式:

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


该表达式实际上返回“ 1”为真,“ 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)上的索引,因此可以更快。

10-06 11:30