sqlite 改变GROUP BY表达式从哪个表中取值会改变结果组吗?

cbjzeqam  于 2023-06-23  发布在  SQLite
关注(0)|答案(1)|浏览(119)

我使用SQLite 3.41.2。
我有一个查询的形式:

SELECT Table1.Name AS Table1Name
       Table2.Name AS Table2Name
       MAX(Value) AS Value
FROM Table1
JOIN RelationTable USING (ID1)
JOIN Table2 USING (ID2)
WHERE Value = <subquery>
GROUP BY Table2.ID2;

GROUP BY子句的行为是否可能取决于它是Table2.ID2还是RelationTable.ID2?在我看来,这不应该改变行为,但这正是我的查询正在发生的事情。有没有可能子查询(我在这里省略了)以某种方式 * clobbering * 或 * shadowing * 这些标识符(因为我在子查询中再次查询RelationTable)?
如果你一定要知道,我愿意提供完整的查询和数据库模式。然而,它是一个练习数据库,并且是德语的,因此语义内容可能不清楚。有鉴于此,请允许我声明,我不认为这个问题与我正在做的练习有必要的相关性,所以我不要求在练习中提供帮助。

k0pti3hp

k0pti3hp1#

将我的评论移动到一个答案:
如果没有一个可重复性最低的例子,这就不清楚了,但是由于您使用的是裸列,至少理论上可能结果会有所不同。对于每个id,它必须从具有等于MAX(VALUE)的值的行中获取Table1.NameTable2.Name,但在领带的情况下是任意的。
改变group by会改变查询获取事物的顺序,最终选择一个仍然遵循规则的不同的任意行。
您可以在这里阅读更多关于裸列的规则(注意min/max的特殊情况)。

相关问题