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:在连接后获取列上的特定行值的主要内容,如果未能解决你的问题,请参考以下文章
如果 Selenium Java 中的“文本”匹配,如何获取动态表中的特定行值