我有两个桌子
在内部表格中,存在一列类型为text的entity_id。 而且entity_id将存储多个房屋ID。
所以看起来像
entity_id (text)
------------------
[1,2]
[3,6]
现在,我必须将此实体表与内部表连接起来。 我将如何实现这一目标。 我知道这可能不是一个好的设计。尽管现在这是我的责任。
答案 0 :(得分:1)
这应该有效:
CREATE TABLE entity(
id integer,
entity_id integer[],
details text
);
CREATE TABLE houses(
id integer,
house_name text
);
INSERT INTO entity(id, entity_id, details)
VALUES
(1, '{1,3}', 'Left side houses'),
(2, '{2,4}', 'Right side houses');
INSERT INTO houses(id, house_name)
VALUES
(1, 'Left 1'),
(2, 'Right 1'),
(3, 'Left 2'),
(4, 'Right 2');
----------------------------------------------
SELECT h.id as house_id, h.house_name, e.details
FROM houses h
LEFT JOIN entity e
ON h.id = ANY(e.entity_id);
| house_id | house_name | details |
| -------- | ---------- | ----------------- |
| 1 | Left 1 | Left side houses |
| 2 | Right 1 | Right side houses |
| 3 | Left 2 | Left side houses |
| 4 | Right 2 | Right side houses |
答案 1 :(得分:1)
正如Laurenz在评论中所说:这里似乎是模型化的错误。
所以我不会直接回答这个问题,但会给出一个最正确的结构:
CREATE TABLE entity (id int primary key);
CREATE TABLE house (id int primary key);
CREATE TABLE entity_house (id bigserial, identity int references entity(id), idhouse int references house(id));
INSERT INTO entity VALUES (1), (2);
INSERT INTO house VALUES (3), (56);
INSERT INTO entity_house (identity, idhouse) VALUES (1,56), (2,56);
SELECT e.*, h.*
FROM entity_house eh
INNER JOIN entity e ON eh.identity = e.id
INNER JOIN house h ON eh.idhouse = h.id;