Postgres: "where in (list)" - 无效的列引用
在 SQL Server 中,以下查询将成功从基于 ID 列表的 user_job_titles 表:
DELETE FROM user_job_titles WHERE id IN ( "c836d018-1d12-4507-a268-a4d80d6d3f54", "d0961a90-7d31-4c4c-9c1b-671115e3d833", "62dda420-6e62-4017-b41d-205c0aa82ead" )
但是,当尝试时在 Postgres 中执行此查询时,会发生错误:
ERROR: column "c836d018-1d12-4507-a268-a4d80d6d3f54" does not exist
原因:
问题在于 IN 中的 ID 值使用双引号条款。在 Postgres 中,双引号被保留作为表名和列名的转义字符。通过在 ID 周围使用它们,Postgres 将它们解释为对不存在列的引用,从而导致错误。
解决方案:
要解决此问题,请将双引号和单引号:
DELETE FROM user_job_titles WHERE id IN ('c836d018-1d12-4507-a268-a4d80d6d3f54', 'd0961a90-7d31-4c4c-9c1b-671115e3d833', '62dda420-6e62-4017-b41d-205c0aa82ead' );
通过使用单引号,ID 被解释为字符串常量,允许 IN子句才能正确运行。
以上是Postgres 与 SQL Server:为什么我的'WHERE IN (list)”查询因无效的列引用而失败?的详细内容。更多信息请关注PHP中文网其他相关文章!