[英]How can I join an array with a table in PostgreSQL
我创建了以下数组,我想将它与一个完全不同的表的 CTE 连接起来
CREATE TABLE places (
name text,
labels text[]
);
INSERT INTO places
VALUES ('Places',
ARRAY['store', 'hospital', 'home']);
我想将这些常量值传递到我的 select 语句中。
SELECT
e.address
FROM env e
所以它可以像
SELECT
'Cashier.' ||places[1] ||'.'|| e.address,
'Doctor.' ||places[2] || '.'||e.address,
'Wife.' ||places[3] ||'.'||e.address
FROM env e
它将显示为
Cashier.store.NY
Doctor.hospital.DC
Wife.house.CA
在结果表中
我在文档中找不到任何东西。 没有我可以在桌子上加入这个数组的相互 id。
我想知道如何做到这一点/甚至有可能,还是我必须更改表并添加一列而不是使用数组?
您可以使用CROSS JOIN
,尝试类似:
SELECT
'Cashier.' || p.labels[1] ||'.'|| e.address,
'Doctor.' || p.labels[2] || '.'|| e.address,
'Wife.' || p.labels[3] ||'.'|| e.address
FROM env e
CROSS JOIN places AS p
WHERE p.name = 'Places'
也许是这样的?
CREATE TABLE env ( name varchar(30) primary key, label text[] ); INSERT INTO env (name, label) VALUES ('Places', ARRAY['store', 'hospital', 'home']); CREATE TABLE data ( id serial primary key, address text[] ); INSERT INTO data (address) VALUES (ARRAY['store 1', 'hospital 1', 'home 1'])
SELECT id, CONCAT_WS('.', 'Cashier', place.label[1], e.address[1]) AS place1, CONCAT_WS('.', 'Doctor', place.label[2], e.address[2]) AS place2, CONCAT_WS('.', 'Husband', place.label[3], e.address[3]) AS place3 FROM data AS e JOIN env AS place ON place.name = 'Places'
编号 | 地点1 | 地点2 | 地点 3 -: |:-------------------- |:------------------------ -- |:----------------- 1 | 收银员.store.store 1 | 医生.医院.医院 1 | 丈夫.home.home 1
db<> 在这里摆弄
但这通常不是通过 arrays 完成的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.