我想返回所有邮政编码都包含在某些邮政编码数组中的所有城市。
在后端我有一个包含邮政编码的数组。该数组如下所示: [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 ...
这需要大量的转换
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