【问题标题】:SQL : cannot cast type record to integer, PostgreSQLSQL:不能将类型记录转换为整数,PostgreSQL
【发布时间】:2014-12-15 20:24:56
【问题描述】:

我对以下查询有疑问(使用 PostgreSQL)

DELETE FROM node
WHERE node.node_id IN
(
SELECT nbr
FROM 
(
SELECT node.node_id 
FROM node, edge_data
WHERE ST_intersects(node.geom, edge_data.geom)
) as nbr
GROUP BY nbr
HAVING COUNT(*) = 2) ;

但不幸的是,我收到此错误消息:

HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
********** Erreur **********
ERROR: operator does not exist: integer = record

我知道 nbr 是一个“记录”,而我的 node_id 是一个整数。但是,如果尝试将 nbr 转换为整数(使用 nbr::integer),则会出现以下消息:

ERROR: cannot cast type record to integer

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: postgresql casting integer record


    【解决方案1】:

    这部分:

    SELECT nbr
    FROM 
    (
      SELECT node.node_id 
      FROM node, edge_data
      WHERE ST_intersects(node.geom, edge_data.geom)
    ) as nbr
    

    从派生表中选择实际别名,而不是从内部查询返回的列。使用别名时,您选择的是 record 而不是单个列。 您需要将其更改为:

    SELECT node_id
    FROM (
      SELECT node.node_id 
      FROM node, edge_data
      WHERE ST_intersects(node.geom, edge_data.geom)
    ) as nbr
    

    所以整个语句是:

    DELETE FROM node
    WHERE node.node_id IN
    (
      SELECT nbr
      FROM (
        SELECT node.node_id 
        FROM node, edge_data
        WHERE ST_intersects(node.geom, edge_data.geom)
      ) as nbr
      GROUP BY nbr
      HAVING COUNT(*) = 2
    );
    

    【讨论】:

      【解决方案2】:

      试试这个:

      DELETE FROM node
      WHERE node.node_id IN
      (
      SELECT nbr.node_id
      FROM 
      (
      SELECT node.node_id 
      FROM node, edge_data
      WHERE ST_intersects(node.geom, edge_data.geom)
      ) as nbr
      GROUP BY nbr.node_id
      HAVING COUNT(*) = 2) ;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-06
        • 2023-03-28
        • 2022-01-03
        • 1970-01-01
        • 2021-11-10
        • 2018-04-06
        • 1970-01-01
        相关资源
        最近更新 更多