gpt4 book ai didi

SQL join任意信息形成混合列表

转载 作者:行者123 更新时间:2023-11-29 11:31:35 24 4
gpt4 key购买 nike

我有一个不同类型的项目列表及其各自的 ID。项目将按组 ID 分组在一起:

Type  | ID   | GroupID
-----------------------
Type1 | 1234 | 1
Type1 | 2345 | 1
Type2 | 1234 | 1
Type3 | 1234 | 1
Type1 | 1234 | 2

每种类型都有单独的表格。这些模式彼此完全无关,因此 UNION 不是一种选择:

Type1 <id, name, status>
Type2 <id, name, description, foo, bar>
Type3 <id, name, foobar, barfoo, foofoo, hoodeedoo>

有没有办法将所有数据合并到一个列表中。随着时间的推移,我们将添加更多类型,并且列表将按组加载。查询上述数据集的第 1 组 将返回以下[伪]数据:

[
{ 1234, name, status }, // Type 1
{ 2345, name, status }, // Type 1
{ 1234, name, description, foo, bar }, // Type 2
{ 1234, name, foobar, barfoo, foofoo, hoodeedoo } // Type 3
]

(更新)此请求的目的:

我们的 UI 将显示此项目列表。我们将有条件逻辑来改变点击项目的行为。例如,如果单击 Type1 项目,则运行 Type1 的行为 - 其他类型依此类推。

最佳答案

如果你想要一个具有可变结构的结果,你最好的选择是 JSON。以下查询将 UNION 查看 type_1type_2type_3 的结果,并以 JSON 格式提供结果:

SELECT 
json_agg(r) AS result
FROM
(
SELECT row_to_json(t) AS r
FROM type_1 t
JOIN item_list il ON il.type='Type1' AND il.id = t.id
UNION ALL
SELECT row_to_json(t) AS r
FROM type_2 t
JOIN item_list il ON il.type='Type2' AND il.id = t.id
UNION ALL
SELECT row_to_json(t) AS r
FROM type_3 t
JOIN item_list il ON il.type='Type3' AND il.id = t.id
) AS s0 ;

这是你会得到的:

|                                            result                                                         |
|-----------------------------------------------------------------------------------------------------------|
| [{"id":1234,"name":"name","status":"status"}, |
| {"id":1234,"name":"name","status":"status"}, |
| {"id":2345,"name":"name-2","status":"status-2"}, |
| {"id":1234,"name":"name","description":"description","foo":"foo","bar":"bar"}, |
| {"id":1234,"name":"name","foobar":"foobar","barfoo":"barfoo","foofoo":"foofoo","hoodeedoo":"hoodeedoo"}] |

您可以查看 SQLFiddle


注意:SQL 的编写方式保证任何顺序。如果需要,您应该在聚合之前添加适当的 ORDER BY

关于SQL join任意信息形成混合列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42013948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com