在postgresql中使用where条件与数组不起作用

baubqpgj  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(203)

我试图使用一个数组,它是在postgres脚本中声明的,但我一直得到以下错误:

  1. op ANY/ALL (array) requires array on right side

字符串
下面是我的代码:

  1. DO $$
  2. DECLARE
  3. id_cie VARCHAR(50) := ARRAY(select id from main_cies);
  4. BEGIN
  5. RAISE NOTICE '%%%', id_cie;
  6. drop table if exists network;
  7. create table network as
  8. select
  9. req_real_estate_qc_shareholders.id as id,
  10. req_real_estate_qc_shareholders.name as name,
  11. 'Main owners' as relation,
  12. req_real_estate_qc_shareholders.address_num as num,
  13. req_real_estate_qc_shareholders.street_name as street,
  14. req_real_estate_qc_shareholders.suite as suite,
  15. req_real_estate_qc_shareholders.zip as zip
  16. from req_real_estate_qc_shareholders
  17. where req_real_estate_qc_shareholders.id = ANY(id_cie);
  18. END $$;


我不理解这个错误,因为当我打印值时,我得到了以下数组:

  1. {1173569659,1173569659}

ulydmbyx

ulydmbyx1#

id_cie VARCHAR(50) := ARRAY(select id from main_cies);将数组转换为字符串('{1173569659,1173569659}')。
如:

  1. select pg_typeof(array[1,2]::varchar);
  2. pg_typeof
  3. -------------------
  4. character varying

字符串
您正在寻找VARCHAR[]

  1. select pg_typeof(array[1,2]::varchar[]);
  2. pg_typeof
  3. ---------------------
  4. character varying[]


于是:
id_cie VARCHAR[] := ARRAY(select id from main_cies);
但是如果id s实际上是整数,我会选择:
id_cie INTEGER[] := ARRAY(select id from main_cies);

展开查看全部
mm5n2pyu

mm5n2pyu2#

你可以在不使用变量的情况下编写同样的功能。这避免了变量声明错误的问题:它不是数组。
这可能行得通:

  1. DO
  2. $$
  3. BEGIN
  4. DROP TABLE IF EXISTS network;
  5. CREATE TABLE network AS
  6. SELECT req_real_estate_qc_shareholders.id AS id
  7. , req_real_estate_qc_shareholders.name AS name
  8. , 'Main owners' AS relation
  9. , req_real_estate_qc_shareholders.address_num AS num
  10. , req_real_estate_qc_shareholders.street_name AS street
  11. , req_real_estate_qc_shareholders.suite AS suite
  12. , req_real_estate_qc_shareholders.zip AS zip
  13. FROM req_real_estate_qc_shareholders
  14. JOIN main_cies ON req_real_estate_qc_shareholders.id = main_cies.id;
  15. END
  16. $$;

字符串

展开查看全部

相关问题