我使用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
)?
如果你一定要知道,我愿意提供完整的查询和数据库模式。然而,它是一个练习数据库,并且是德语的,因此语义内容可能不清楚。有鉴于此,请允许我声明,我不认为这个问题与我正在做的练习有必要的相关性,所以我不要求在练习中提供帮助。
1条答案
按热度按时间k0pti3hp1#
将我的评论移动到一个答案:
如果没有一个可重复性最低的例子,这就不清楚了,但是由于您使用的是裸列,至少理论上可能结果会有所不同。对于每个id,它必须从具有等于
MAX(VALUE)
的值的行中获取Table1.Name
和Table2.Name
,但在领带的情况下是任意的。改变
group by
会改变查询获取事物的顺序,最终选择一个仍然遵循规则的不同的任意行。您可以在这里阅读更多关于裸列的规则(注意
min
/max
的特殊情况)。