SQL 查询,返回其值包含在数组中的所有记录。特定条件下的数据检索

问题描述 投票:0回答:1

我想返回所有邮政编码都包含在某些邮政编码数组中的所有城市。

在后端我有一个包含邮政编码的数组。该数组如下所示: [41200, 41201, 41202, 42500, 42501, 42504, 42505, 42506].

使用 SQL 查询,我从数据库中检索所有可用城市以及分配给它们的所有邮政编码。示例:

城市 邮政编码
纽约 10001、10002、10003、10004、...

我想为此查询添加某个条件,使查询返回所有邮政编码都包含在该数组中的所有城市。

简单的例子: 表:[1,2,3,4,5,6] SQL查询结果:

城市 邮政编码
城市1 1,2,7
城市2 1, 4
城市3 1,2,3,4,5,6
城市4 1,3,2,8

添加条件后,查询应返回城市 2 和城市 3,因为表包含城市 2 / 城市 3 的所有邮政编码,但不包含城市 1 和 4 的所有邮政编码。谢谢。

这是我的疑问:

SELECT gmina, kody
FROM (
    SELECT gmina, STRING_AGG(DISTINCT kod, ', ') AS kody
    FROM ser_strumieniowanie_kody ser
    LEFT JOIN hog_miasta hog ON ser.st_kod = hog.kod
    WHERE ser.pm = ser.av
    GROUP BY gmina
) AS subquery where ...
sql postgresql
1个回答
0
投票

这需要大量的转换

select version();CREATE TABLE tab_city (
  "City" VARCHAR(6),
  "Postcodes" VARCHAR(16)
);

INSERT INTO tab_city
  ("City", "Postcodes")
VALUES
  ('City 1', '1, 2, 7'),
  ('City 2', '1, 4'),
  ('City 3', '1, 2, 3, 4, 5, 6'),
  ('City 4', '1, 3, 2, 8');
版本
x86_64-pc-linux-gnu 上的 PostgreSQL 16.0 (Debian 16.0-1.pgdg120+1),由 gcc (Debian 12.2.0-14) 12.2.0 编译,64 位
SELECT 1
CREATE TABLE
INSERT 0 4
SELECT "City"
FROM tab_city WHERE regexp_split_to_array("Postcodes", ',')::int[] <@ ARRAY[1, 2, 3, 4, 5, 6]
城市
城市2
城市3
SELECT 2

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.