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?
答案 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
就我而言,我将整个查询包含在另一个查询中,该查询选择查询元素的总和,计数或最大值,并将主查询称为“内部表”。