Firebird SQL 使用“WITH”语句:多次使用WITH select 时选择似乎不正确

问题描述 投票:0回答:1

我需要为 Firebird 2.1 构建 SQL 查询。我正在尝试使用WITH语句进行选择,该语句需要在此查询中执行多次(我以前从未使用过此构造)。

情况(非常简单)如下:我有一个表,比方说 ITEM_GROUP,它存储项目组。组可以是彼此的子组。所以还有一个表CHILD_PARENT_GROUP,它存储信息,哪个组是哪个组的子组。最后,每个组都可以有一些与之相关的规则,因此有一个表 GROUP_RULE,它存储信息,对于哪个组我有哪些规则。 现在,根据给定的组 ID,我需要找到所有家长及其规则(如果他们有规则)。

我使用的(简化的)SQL如下:

             WITH
                GROUP_RULE AS(
                select gr.ID AS GROUP_ID, rule.RULE_NAME AS RULE_NAME, childParent.PARENT_GROUP_ID AS PARENT_ID
                from ITEM_GROUP gr
                left join GROUP_RULE rule on gr.ID = rule.GROUP_ID
                left join CHILD_PARENT_GROUP childParent on childParent.CHILD_GROUP_ID = gr.ID
             )
             SELECT
                 G1.GROUP_ID AS G1_ID, G1.RULE_NAME AS G1_RULE,
                 G2.GROUP_ID AS G2_ID, G2.RULE_NAME AS G2_RULE,
                 G3.GROUP_ID AS G3_ID, G3.RULE_NAME AS G3_RULE,

             FROM GROUP_RULE G1
             left join GROUP_RULE G2 on G1.PARENT_ID = G2.GR_ID
             left join GROUP_RULE G3 on G2.PARENT_ID = G3.GR_ID

             where G1.GR_ID in ('THE_PARENT_GROUP', 'SOME_CHILD_1', 'SOME_CHILD_2')

假设 SOME_CHILD_2 是 SOME_CHILD_1 的子级,而 SOME_CHILD_1 是 THE_PARENT_GROUP 的子级。假设只有 ID 为 THE_PARENT_GROUP 的组有相关规则(例如名称为 PARENT_RULE),所有其他组都没有规则。现在,我从这个查询中得到的结果很奇怪: 当选择THE_PARENT_GROUP作为第一组时,其规则被正确选择,但是如果选择THE_PARENT_GROUP作为第二或第三组,则选择null作为其规则(尽管其id被正确选择)。所以结果看起来像这样:

有人知道为什么我会得到这个结果吗? 为什么父母的ID显示正确,但规则只选择第一个孩子?我对WITH语句有一些基本的误解吗?我很确定,我的 SQL 中没有拼写错误,我已经检查了 100 遍了。

sql firebird common-table-expression firebird2.1
1个回答
0
投票

抱歉问了这个愚蠢的问题!答案很简单,我没有注意到我的(真实)结果中的组 ID 之间存在细微差别......

© www.soinside.com 2019 - 2024. All rights reserved.