SQL:在连接后获取列上的特定行值

Posted

技术标签:

【中文标题】SQL:在连接后获取列上的特定行值【英文标题】:SQL: Getting specific row values on a column after a join 【发布时间】:2013-10-12 18:50:59 【问题描述】:

我有以下疑问:

SELECT
    "metaCAE"."family",
    "metaCAE"."name",
    COUNT(1) AS "count"
FROM
    "userHistoryProfessional"
INNER JOIN
    "company_metaCAE"
        ON (
            "company_metaCAE"."id_company" = "userHistoryProfessional"."id_company"
        )
INNER JOIN
    "metaCAE"
        ON (
            "metaCAE"."id" = "company_metaCAE"."id_metaCAE"
        )
WHERE
    "userHistoryProfessional"."dateUntil" IS NULL
GROUP BY
    "metaCAE"."family"
ORDER BY
    "count" DESC;

metaCAE 表的架构是

id
level
family
name

多个名字属于同一个家族,只有一个名字是该家族的父级,具有最低级别 (1)。

示例,不包括 id 列:

level family   name
1     A        Pork
2     A        Pork-Products
3     A        Pork-Products Incorporated
1     B        Cork
2     B        Cork-Products
3     B        Cork-Products Incorporated and Sons
3     B        Cork Incorporated

问题是我只希望每个家庭的父级别 (1) 的名称出现在我的联接中,但 company_metaCAE.id_metaCAE 仅引用 metaCAE 表中的子级别名称(实际公司名称)。

所以,我想做的是得到一个结果,我用相应的父级别名称替换子级别名称。在我的架构中,这是具有最低级别和同一家族的名称。

所以不是这个结果:

family count family-name
A      1     Pork-Products Incorporated
B      2     Cork Incorporated

我想要类似的东西

family count family-name
A      1     Pork
B      2     Cork

【问题讨论】:

company_metaCAE.id_metaCAE 只包含儿童,我是否理解正确? 【参考方案1】:

您需要在查询中添加另一个内部联接:

   SELECT
        "metaCAE"."family",
        parentMetaCAE."name",
        COUNT(1) AS "count"
    FROM
        "userHistoryProfessional"
    INNER JOIN
        "company_metaCAE"
            ON (
                "company_metaCAE"."id_company" = "userHistoryProfessional"."id_company"
            )
    INNER JOIN
        "metaCAE"
            ON (
                "metaCAE"."id" = "company_metaCAE"."id_metaCAE"
            )
    INNER JOIN                               ---- PARENT INNER JOIN
        (SELECT family, name 
         FROM metaCAE
         WHERE level = 1) parentMetaCAE
           ON (parentMetaCAE.family = metaCAE.family)
    WHERE
        "userHistoryProfessional"."dateUntil" IS NULL
    GROUP BY
        "metaCAE"."family"
    ORDER BY
        "count" DESC;

【讨论】:

只需将 id=1 更改为 level=1,但效果很好,谢谢。 =)

以上是关于SQL:在连接后获取列上的特定行值的主要内容,如果未能解决你的问题,请参考以下文章

特定列上的SQL内部联接

如果 Selenium Java 中的“文本”匹配,如何获取动态表中的特定行值

如何从 ASP.NET C# 中的 SqlDataSource 获取特定的行值?

通过特定行值动态获取列名

Sql Server CE - 临时禁用特定列上的自动增量

特定列上的脚注过滤器