小编bau*_*dot的帖子

可以使用 CASE 选择要 JOIN 的表吗?

我正在尝试使用 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;
Run Code Online (Sandbox Code Playgroud)

如果有语法的快速修复,我很想听听。或者,如果这是您在概念上无法做到的事情 - 让每一行选择自己的连接 - 我很乐意获得更深入解释的链接。

过去,我通过执行两个 SELECT 来完成类似的操作,其中一个针对 item_templates 表,另一个针对 unique_items 表,并采用它们的 UNION。这感觉是一种更正确且更少浪费的方法。如果不是出于某种原因与 SQL 更深层次的架构有关,我想了解为什么。

postgresql join case

6
推荐指数
1
解决办法
9300
查看次数

带有 WHERE .. IN 数组参数的存储过程

我想为表中与传递到存储过程的行 id 数组匹配的每个条目设置一个布尔值。帮我破解正确的语法来完成这个任务?以下是我所得到的最接近的结果。

CREATE PROCEDURE tester (id_list bigint[])
AS
$$
UPDATE some_table
SET touched = true
WHERE id IN (unnest(id_list));
$$ LANGUAGE sql;

CALL tester(ARRAY[12, 34]);
Run Code Online (Sandbox Code Playgroud)

postgresql stored-procedures

5
推荐指数
1
解决办法
4135
查看次数

标签 统计

postgresql ×2

case ×1

join ×1

stored-procedures ×1