感谢每个人 - 伟大的结果!
大家好 - 我应该进一步详细解释 - 没有匹配该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
我确信这很简单,但就像我说的那样,我很难过。
谢谢,
荷马。
答案 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子句匹配的行。
编辑:根据您的更新,不,我认为您无法做到。您的应用程序逻辑应该在哪里处理。