我正在尝试使用 CASE 表达式来选择每行应与哪个表连接。
假设我的游戏中有一个 item_instances 表,其中包含游戏世界中的所有项目,其中一些项目是 item_templates 表中通用项目的千篇一律的副本,其他项目以模板开始,然后在玩家使用它们时获得了独特的属性。它们现在存储在 unique_items 表中。
因此,当我在 item_instances 表中找到一个项目的记录时,我想查找有关它的更多信息,并且我需要从正确的表中提取该信息。
这是我一直在尝试的事情,但没有成功:
SELECT item_table, item_id, *
FROM item_instances AS ii
JOIN
CASE ii.item_table
WHEN 0 THEN 'item_templates'
WHEN 1 THEN 'unique_items'
ELSE 'unique_items'
END
ON CASE = ii.item_id;
如果有语法的快速修复,我很想听听。或者,如果这是您在概念上无法做到的事情 - 让每一行选择自己的连接 - 我很想获得更深入解释的链接。
在过去,我通过执行两个 SELECTS 来完成这样的操作,其中一个针对 item_templates 表,另一个针对 unique_items 表,并采用它们的 UNION。这感觉像是一种更正确且浪费更少的方法。如果不是出于某种原因与 SQL 的更深架构有关,我想了解原因。