加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2021-01-20 13:47:10 所属栏目:编程 来源:网络整理
导读:在我重构的MMORPG处事器中,我有两个表.一个用于物品,另一个用于咒语.每个项目最多包括5个咒语,因此我回收了稀少矩阵名目,个中有5列为咒语ID. 此布局的原始计划者选择行使不支持引用的MyISAM,从而导致项目表包括不存在拼写ID的项目.我但愿找出哪些项目标拼写I

在我重构的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次搜查.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读