使用字符串从一行进行SQL多重连接

时间:2018-05-03 09:36:11

标签: sql postgresql

我有两张这样的表:

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。

2 个答案:

答案 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)