SQL返回NULL而不是0行

时间:2015-07-29 21:10:16

标签: mysql sql

SELECT max(s.id), c.id, s.time, s.rankxp, s.score, s.kills, s.deaths, s.headshots, s.rank 
FROM clients c, stats s 
WHERE c.id = s.client_id  && s.client_id = 123

如果可以在统计信息表中找到client_id,则此查询可以正常工作。但是,如果无法在stats表中找到client_id,则查询将返回null而不是0行。

如果在stats表中找不到客户端,如何使此查询返回0行而不是null?

3 个答案:

答案 0 :(得分:1)

如果客户端ID始终存在于客户端表中,则只需使用左连接。

SELECT max(s.id), c.id, s.time, s.rankxp, s.score, s.kills, s.deaths, s.headshots, s.rank FROM clients c Left Join stats s on c.id = s.client_id Where c.id=123

但是这会在max(s.id)字段中给出NULL。

答案 1 :(得分:0)

我想你是在尝试为客户提供最新的统计数据,为此你不需要做任何联接,试试这个:

SELECT s.id, s.client_id, s.time, s.rankxp, s.score, s.kills, s.deaths, s.headshots, s.rank 
FROM stats s 
WHERE s.client_id = 123
ORDER BY s.id DESC
LIMIT 1

答案 2 :(得分:-1)

我可以通过使用与第一个联合的重复sql语句来强制返回0值的记录。如:

SELECT 0 ID, 123 ClientID, 0 STime, 0 RankXP, 0 Score, 0 Kills, 0 Deaths, 0 Headshots, 0 rank
from stats s
where s.client_id = 123
UNION
select s.id ID, s.client_id ClientID, s.time STime, s.rankxp RankXP, s.score Score, s.kills Sills, s.deaths Deaths, s.headshots Headshots, s.rank Rank
from stats s
where s.client_id = 123

就我而言,我将整个查询包含在另一个查询中,该查询选择查询元素的总和,计数或最大值,并将主查询称为“内部表”。