sql-避免在查询中多次使用同一子查询

sql-避免在查询中多次使用同一子查询,第1张

概述在我重构的MMORPG服务器中,我有两个表.一个用于物品,另一个用于咒语.每个项目最多包含5个咒语,因此我采用了稀疏矩阵格式,其中有5列为咒语ID.此结构的原始设计者选择使用不支持引用的MyISAM,从而导致项目表包含不存在拼写ID的项目.我希望找出哪些项目的拼写ID不正确,以便对其进行修复,也许从长远来看,可以转换为InnoDB.到目前为止,我只能提出以下

在我重构的MMORPG服务器中,我有两个表.一个用于物品,另一个用于咒语.每个项目最多包含5个咒语,因此我采用了稀疏矩阵格式,其中有5列为咒语ID.

此结构的原始设计者选择使用不支持引用的MyISAM,从而导致项目表包含不存在拼写ID的项目.我希望找出哪些项目的拼写ID不正确,以便对其进行修复,也许从长远来看,可以转换为InnoDB.

到目前为止,我只能提出以下建议:

SELECT COUNT(*)  FROM items WHERE spellID_1 NOT IN (SELECT entry FROM research.spell)    OR spellID_2 NOT IN (SELECT entry FROM research.spell)    OR spellID_3 NOT IN (SELECT entry FROM research.spell)    OR spellID_4 NOT IN (SELECT entry FROM research.spell)    OR spellID_5 NOT IN (SELECT entry FROM research.spell);

有没有更优雅的方法呢?

编辑:NulL spellID_n被视为有效,因为它仅表示该物品在该插槽中没有咒语.

最佳答案设计表格会更加优雅,这样您就不会在同一张表格中有5个拼字栏-也就是说,通过有一个item_spell表,每个项目允许任意数量的拼写.除了更具前瞻性(当您现在需要6个咒语)时,您的查询将变为:

SELECT COUNT(disTINCT item_ID)  FROM item_spells WHERE spell_ID NOT IN (SELECT entry FROM research.spell);

实际上,您被迫执行5次检查. 总结

以上是内存溢出为你收集整理的sql-避免在查询中多次使用同一子查询 全部内容,希望文章能够帮你解决sql-避免在查询中多次使用同一子查询 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1165425.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存