我有一个第 3 方软件(比如 user_fields)使用的表,其中每一行都有一个 user_id、一个 field_id 和一个 field_value。我知道很糟糕。
我还有另一个我自己的用户表,users,它包含填充它所需的值,除了 field_id 是“神奇的”并且对应于自定义字段映射。
我如何编写一个选择查询来实现这一点:
user_id | company_name | first_name | country
---------------------------------------------------
1 | Nutty Choc Company | Si | GB
2 | Ljubljanske R Us | Pie | IT
进入这个?
user_id | field_value | field_id
---------------------------------------
1 | Nutty Choc Company | 10
1 | Si | 11
1 | GB | 12
2 | Ljubljanske R Us | 10
2 | Pie | 11
2 | IT | 12
我正在使用 Postgresql 8.4,并打算将查询提供给插入。
我尝试过使用 unnest 和一个数组,将字段扩展为行,但它在处理完选择中的任何其他字段后取消嵌套,因此只是复制未嵌套行的值。
有什么想法吗?
干杯, 硅
编辑:格式和澄清狡猾的名称值表是第 3 方。
最佳答案
我将其添加为一个单独的答案,因为它与我发布的其他答案完全不同。你可以尝试这样的事情:
SELECT
U.id,
UF.id AS field_id,
CASE UF.id
WHEN 10 THEN U.first_name
WHEN 11 THEN U.country
WHEN 12 THEN U.company_name
ELSE NULL
END AS field_value
FROM
Users U
CROSS JOIN User_Fields UF
这是假设您有一个 User_Fields 表(或任何可能命名的表),它为您提供了所有可能的用户字段。不过,您必须使您的 CASE 语句保持最新。
关于sql - 如何将 PostgreSQL 行扩展为多行以更新 "custom fields"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1826287/