admin

使用我的SQL查询帮助我(需要始终返回至少一行。)

sql

首先,这是我的SQL查询:

SELECT research_cost, tech_name,
    (SELECT research_cost
        FROM technologies
        WHERE research_cost <= USERS_RESEARCH_POINTS_VALUE
        ORDER BY research_cost DESC
        LIMIT 1) as research_prev,
    (SELECT cost
        FROM technology_costs
        WHERE id = 18
        LIMIT 1) as technology_cost
FROM `technologies`
    JOIN technology_costs
    ON id = COUNT_OF_TECHS_USER_LEARNED
WHERE research_cost > USERS_RESEARCH_POINTS_VALUE
ORDER BY research_cost ASC
LIMIT 1

网站链接:http :
//www.joemajewski.com/fortress/

某些人可能会认为上述查询大小适中,甚至很小;不是我。对我来说,这是我编写过的最大,最复杂的SQL查询之一,因此我将自己推向了极限。

无论如何,查询本身没有语法错误,并且在大多数情况下,它确实可以执行我想要的操作。但是,有一个小问题。

如果mainSELECT子句未返回任何行(“ SELECT research_cost,tech_name从technologiesWHERE
research_cost>任何”),则整个查询为空集。

如果有帮助,Fortress是我正在开发的这款游戏。这是一个基于浏览器的MMORPG,用户可以在其中组建一支部队,尝试获得排行榜的头把交椅。技术是一种游戏机制,用户可以购买其统计数据(黄金收入,单位产量等)的升级版。研究是一种游戏机制,可让您通过培训科学家进行研究来学习新技术。这就是查询的全部内容。它掌握了正在研究的当前技术及其研究成本。此外,它还抓住了下一代技术将要花费多少的黄金成本。

所以…有什么办法我可以强制在结果集中至少返回一个空行,因为嵌套的select语句检索脚本中所需的变量,即使外部查询什么也没有返回。或者有人可以更改它,以便始终返回结果。

如果还有其他需要,请告诉我。:)


阅读 216

收藏
2021-06-07

共1个答案

admin

此查询始终返回至少1行

SELECT * FROM (__your old query__)aaa
UNION 
SELECT NULL as research_cost, NULL as tech_name, NULL as research_prev, 
... etc [FROM DUAL] // DUAL is a  dummy table in mysql
2021-06-07