我需要在一个查询中返回两个不同的结果。当我独立运行 时,第一个没有返回任何行(这很好),第二个返回一些行(也很好)。当我联合他们时,我得到1048 - Column "Date" cannot be null
。
我需要Date, PW, errors
的结果行,我将提供一个图表,以显示Date
指定的时间点系统中发生了什么。在这两个表中,Date
的格式为DateTime
,且绝不能为NULL。
SELECT `Date`, COUNT(`ID`) AS `PW`, 0 AS `errors`
FROM `systemlogins`
WHERE `Result` = 'PasswordFailure' AND `Date` >= DATE_SUB(NOW(), INTERVAL 1 DAY)
UNION ALL
SELECT `Date`, 0 AS `PW`, COUNT(`ID`) AS `errors`
FROM `systemerrors`
WHERE `Date` >= DATE_SUB(NOW(), INTERVAL 1 DAY)
GROUP BY ( 4 * HOUR( `Date` ) + FLOOR( MINUTE( `Date` )/15)) --i.e. full 1/4s of hour
ORDER BY ( 4 * HOUR( `Date` ) + FLOOR( MINUTE( `Date` )/15))
我已经读过MySQL可能会忽略UNION中的表'NOT NULL条件,导致该错误。我确实删除了表上的“NOT NULL”限制,并且tada,它的工作原理。现在,这些限制已经放在那里是有原因的,我想在运行上述查询时保留它们 - 有什么办法吗?
修改:
Order
是恶棍 - 删除它会返回正确的结果,尽管有Date
为NULL
的空行。出于我的目的,我需要以某种方式按Date
订购结果。
答案 0 :(得分:0)
为什么选择Date
列?由于您使用的是聚合函数COUNT
,但在任何选择中都没有GROUP BY
子句,因此在我看来您并不关心Date
列。
尝试添加GROUP BY
子句,或从选择中删除Date
列。