sql - 如何将 PostgreSQL 行扩展为多行以更新 "custom fields"?

标签 sql postgresql

我有一个第 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/

相关文章:

SQL - 通过条件对行进行分组,直到发现异常

mysql - 是否可以编写一个 SQL 查询来返回另一个表中不存在的值?

postgresql - SSRS 多值参数 - 无法正常工作

performance - 强制 PostgreSQL 释放分配的内存

sql-server - 将 SQL Server 2008 数据库迁移到 Postgres

循环中的Postgresql plpgsql存储过程更新语句

sql - 使用单个 SQL 查询构建分层树

SQL 错误的百分比计算

mysql - SQL 查询更新字段取决于子查询

mysql - 将 MySQL 选择转换为 PostgreSQL