sql - PostgreSQL 错误 : function expression in FROM cannot refer to other relations of same query level

标签 sql postgresql

我正在使用 postgreSQL 对数据库进行排序。当我调用该查询时,我遇到了一个简单的问题,我试图为我们的许多人解决这个问题,但它仍然不起作用。 我正在尝试将一张表拆分为许多不同的表。

ALTER TABLE table
ADD COLUMN nationality TEXT,
ADD COLUMN place_of_birth TEXT,
ADD COLUMN date_of_birth INTEGER,
ADD COLUMN date_of_death INTEGER;

-- perform update
-- part which is not working

WITH splitted_data AS (
SELECT
  title,
  s [1] AS nationality,
  s [4] AS place_of_birth,
  s [5] AS date_of_birth,
  s [6] AS date_of_death,
  object_id
FROM
  table,
  regexp_matches(table.artist_bio, '\(([^),]+),?\s?(born )?(([^\.]+)\.? )?(\d{4})?(\d{4})?\)') s
)
UPDATE table
SET
  nationality = new_values.nationality,
  place_of_birth = new_values.place_of_birth,
  date_of_birth = new_values.date_of_birth :: INTEGER,
  date_of_death = new_values.date_of_death :: INTEGER
FROM (
       SELECT
         nationality,
         place_of_birth,
         date_of_birth,
         date_of_death,
         object_id
       FROM splitted_data
     ) AS new_values
WHERE table.object_id = new_values.object_id;

--until here

ALTER TABLE table
  DROP artist_bio;

地点:

标题是包含标题的其他列

artist_bio是一个VARCHAR,包含要分割的信息

这是表格的一小部分:http://wklej.org/hash/3a2f6f17d20/

感谢您的帮助!

最佳答案

我相信问题出在这个子查询上:

SELECT title,
       s[1] AS nationality,
       s[4] AS place_of_birth,
       s[5] AS date_of_birth,
       s[6] AS date_of_death,
       object_id
FROM table,
     regexp_matches(table.artist_bio, '\(([^),]+),?\s?(born )?(([^\.]+)\.? )?(\d{4})?(\d{4})?\)') s

我认为您只需使用 regexp_matches() 返回子查询中的列即可完成您想要的操作:

SELECT title,
       s[1] AS nationality,
       s[4] AS place_of_birth,
       s[5] AS date_of_birth,
       s[6] AS date_of_death,
       object_id
FROM (SELECT t.*,
             regexp_matches(table.artist_bio, '\(([^),]+),?\s?(born )?(([^\.]+)\.? )?(\d{4})?(\d{4})?\)') as s
      FROM table t
     ) t

关于sql - PostgreSQL 错误 : function expression in FROM cannot refer to other relations of same query level,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35524757/

相关文章:

java - 使用 PreparedStatement 执行 sql 查询

mysql select 基于两个条件

mysql - 如何统计MySQL中一个字段所有行的所有字符?

sql - 带有 Sql View 的 Entity Framework 在生成 .sql 文件中显示为表

database - postgresql 中带有字母(非数字)的列的数据类型

php - 如何防止 PHP 中的 SQL 注入(inject)?

postgresql - "No relations found"在 rails db :migrate succeeds 之后的 psql 中

ruby-on-rails - 如何停止 heroku db 进程

postgresql - 如何在 ON CONFLICT DO UPDATE SET X = OLD.X + EXCLUDED.X 中引用 OLD.X

postgresql - 如何在 gorm postgresql 中定义只读副本