我最近在使用PostgreSQL时遇到了一个非常奇怪的问题(在元数据库环境中,因为我不能直接访问数据库)
在table_A中,我使用string_agg()将一系列字符串按一定顺序组合成一个字符串,例如:“A > B > C”或“3.5 > 4 > 5.6”,表_A中结果正确一致。
然而,当我在table_B中使用左连接table_A时,字符串中的序列被改变,例如。“A > C > B”,更糟糕的是,序列的变化随机出现,即,有时是“A > C > B”,有时是“B > A > C”,而且似乎从来都不正确。
我不知道这是元数据库问题还是我的脚本问题。你的知识将非常感激!
为了确保它不会因为Table_B中的脚本和Table_A中的太多列/值而变得复杂,我简化了Table_B中的脚本,只导入/连接一列和一条记录,问题仍然是一样的
例如
select B.id,A.string from table_B B left join table_A A on A.id = B.id where B.id = '123'
结果:123| 'B >C >A' //但是期望:123| 'A >B >C'
1条答案
按热度按时间qyswt5oh1#
结果集的顺序取决于数据库选择的查询执行计划。如果使用
string_agg()
这样的聚合函数,则会按照查询计划生成行的顺序聚合行。如果你需要一个固定的顺序,你必须明确它: