在我重构的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被视为有效,因为它仅表示该物品在该插槽中没有咒语.
最佳答案