即使RIGHT值不存在,也返回LEFT值

问题描述 投票:0回答:1

我正在尝试最小化我的应用程序中的查询数量。在这种情况下,我需要通过其id查找聊天服务器的属性,并从另一个表中找到任何“实时流”,其中关联的服务器ID具有“开始时间”值但是具有空“结束时间”值(表示直播流仍在进行中)。如果没有正在进行的实时流,那么没有“结束时间”值将为空,但我仍然需要该服务器的属性。

实质上:

查找服务器属性并查找实时流:

  • 如果没有实时流(没有空结束时间),请使用服务器属性执行某些操作
  • 否则,如果有实时流(具有空结束时间的条目),请告诉用户
SELECT t1.properties
FROM t1 
LEFT OUTER JOIN t_streams 
ON t1.serverID = t2.serverID 
WHERE t1.serverID = '<id>';

...如果t2完全为空,则返回null和endtime为null,这很好,但是所有行如果不是,那就很糟糕。

SELECT t1.properties
FROM t1
LEFT OUTER JOIN t_streams
ON t1.serverID = t2.serverID
WHERE t1.serverID = '<id>'
AND t2.endtime IS NULL;

...如果没有活动流(没有行具有空终止时间),则不返回任何内容,但仍需要至少返回t1.properties。

基本上我正在尝试使用“服务器属性”创建一个新的“实时流”,如果没有当前活动的直播流。

sql sqlite
1个回答
1
投票

我想你可能会想要这样的东西:

SELECT t1.properties
FROM t1 LEFT OUTER JOIN
     t_streams t2
     ON t1.serverID = t2.serverID
WHERE t1.serverID = '<id>'
ORDER BY (CASE WHEN t2.endtime IS NULL THEN 1 ELSE 2 END),
         t2.endtime DESC
LIMIT 1;

这将返回一个匹配的行,其中endtime的首选项为NULL

© www.soinside.com 2019 - 2024. All rights reserved.