MySQL NULL问题

时间:2010-12-08 20:51:39

标签: mysql null

感谢每个人 - 伟大的结果!

大家好 - 我应该进一步详细解释 - 没有匹配该crieria的行,因此查询的当前结果是正确的(即零行)但是是否可以强制MySQL返回呢? / p>

q1     q2     q3
NULL   NULL   NULL

我怀疑不是来自下面的回复!

干杯,

小时。

大家好,

这可能是一个非常非常简单的问题,但我很难过!

我有以下查询:

SELECT q1, q2, q3 FROM tresults WHERE date = 'NOV2010' AND brand = 'XYZ'

现在,如果NOV2010和XYZ的q1,q2和q3为空,则查询结果为:

MySQL returned an empty result set (i.e. zero rows).

然而,我需要强制MySQL返回NULL,例如查询将导致:

q1     q2     q3
NULL   NULL   NULL

我确信这很简单,但就像我说的那样,我很难过。

谢谢,

荷马。

6 个答案:

答案 0 :(得分:4)

我认为这不简单 - 希望能够这样做似乎是一件非常不寻常的事情。如果我必须这样做,我想我会使用LEFT JOIN:

SELECT q1, q2, q3
FROM (SELECT NULL AS foo) T1
LEFT JOIN tresults ON date = 'NOV2010' AND brand = 'XYZ'

如果q1不可为空而且你只需要一行,这是另一种方法:

SELECT q1, q2, q3 FROM tresults WHERE date = 'NOV2010' AND brand = 'XYZ'
UNION ALL
SELECT NULL, NULL, NULL
ORDER BY q1 DESC
LIMIT 1

答案 1 :(得分:2)

正如其他人所指出的那样,当没有记录与您的查询匹配时,返回“NULL”记录而不是空结果集有点不寻常,我不知道支持它的非常优雅的方式。一个选项是UNION您的记录集,如下所示:

SELECT q1, q2, q3 FROM tresults WHERE date = 'NOV2010' AND brand = 'XYZ'
UNION
SELECT NULL AS q1, NULL AS q2, NULL AS q3

这可确保您始终获得结果集,但这也意味着即使第一个查询 返回记录时,“NULL”记录也会附加到结果集中...

那就是说,根据@ ceejayoz的回答,这可以在你的应用程序逻辑中得到更好的处理。您是否介意详细说明为什么您需要此结果?

答案 2 :(得分:2)

如果你只想要1行或0行,这应该可行

SELECT q1,q2,q3 FROM
    (
    SELECT q1, q2, q3 FROM tresults WHERE date = 'NOV2010' AND brand = 'XYZ'
    UNION
    SELECT NULL AS q1, NULL AS q2 NULL AS q3 
    ) sq
ORDER BY q1 DESC LIMIT 1;

答案 3 :(得分:1)

假设你的问题是准确的,并且你实际上拥有一行有三个NULL,我希望MySQL能够返回它。如果没有,您可以强制选择非空值:

SELECT q1, q2, q3, 1 AS dummy
FROM tresults
WHERE date = 'NOV2010' AND brand = 'XYZ'

但是,如果您的数据库没有tresults中满足条件的记录,那么您就是SOL - 数据库中没有记录,因此MySQL不会向您返回任何内容。< / p>

答案 4 :(得分:1)

您的期望确实应该发生什么。再次检查您的数据库是否真的包含NOV2010和XYZ的条目(也许NOV中的O偶然是0或类似的拼写错误?)

当你这样做时会发生什么?

SELECT * FROM tresults WHERE date = 'NOV2010' AND brand = 'XYZ'

答案 5 :(得分:0)

MySQL已经这样运作了。如果行数为零,则没有与WHERE子句匹配的行。

编辑:根据您的更新,不,我认为您无法做到。您的应用程序逻辑应该在哪里处理。