我有两张这样的表:
table1
id(int) | desc(TEXT)
--------------------
0 | "desc1"
1 | "desc2"
table2
id(int) | table1_id(TEXT)
------------------------
0 | "0"
1 | "0;1"
我想在table2中选择数据并将table1_id替换为table1中的desc字段,当我的字符串为';'时分隔符意味着我有多个选择。
我可以像这样进行单一选择
SELECT table1.desc
FROM table2 LEFT JOIN table1 ON table1.id = CAST(table2.table1_id as integer);
在table2上使用SELECT输出,其中id = 1:
"desc"
------
"desc1, desc2"
我正在使用Postgresql10,python3.5和sqlalchemy
我知道如何通过提取数据并使用python处理它然后再次查询来实现它,但我正在寻找一种方法来使用一个SQL查询。
PS:我无法修改table2。
答案 0 :(得分:2)
您可以将CSV值转换为数组,然后加入:
meteor add force-ssl
答案 1 :(得分:0)
这实际上是一种令人憎恶的数据设计。
因此,您必须编写一个复杂的查询来获得所需的结果:
SELECT string_agg(table1."desc", ', ')
FROM table2
CROSS JOIN LATERAL regexp_split_to_table(table2.table1_id, ';') x(d)
JOIN table1 ON x.d::integer = table1.id
WHERE table2.id = 1;
string_agg
--------------
desc1, desc2
(1 row)