针对不同输入元素的通用 SQL 查询

Posted

技术标签:

【中文标题】针对不同输入元素的通用 SQL 查询【英文标题】:Universal SQL query for different input elements 【发布时间】:2013-04-17 14:11:54 【问题描述】:

我在以下抽象示例上下文中遇到 SQL 查询问题:我的 sql 查询有 2 个不同的输入数据,定义为“MainElement”,其中一个的键为 123,另一个主元素的键为 789。

此外,我还有一个名为 Relation 的表,其中包含 pkFirstElementSecondElementThirdElement 列。

此外,还有一个名为 Props 的表,其中包含 pknamevalueString 列。关于此上下文的特殊功能是 Props 中的列 name 定义了另外 2 列称为 4thElement 和表 Relation5thElement作为一行,其值位于专栏valueString

|pk | 1stElement | 2ndElement | 3rdElement |
|abc|-----123----|-----456----|-----null---|
|def|-----789----|-----101112-|---131415---|

|Pk | Name | ValueString |
|def|4thElement|161718---|
|def|5thElement|ghi------|

如您所见,MainElement 789Props 中具有 4thElement5thElement 的值,但 MainElement 123Props 中没有任何价值。

我需要的是一个通用 SQL 查询,其输入值为 1stElement,例如 123 或 789,它返回两个主要元素的结果,与 MainElement123 在 Props 中没有任何值这一事实无关

示例结果:

|1stElement | 2ndElement | 3rdElement | 4thElement | 5thElement |
|123--------|------456---|-----null---|---null-----|----null----|
|789--------|----101112--|---131415---|---161718---|----ghi-----|

我正在使用 Oracle SQL Developer

Select 
rel.1stElement,
....
From 
Relation rel,
Props pro,
Where 
?

提前致谢。

【问题讨论】:

您说输入值将是“123 789”,但随后希望得到“两者的结果 主要元素”。这不是自相矛盾吗?请澄清。 我不明白为什么这应该是自相矛盾的?我想对两个输入都使用这个 sql 查询。第一个输入 123 的 sql 查询,第二个输入 789 的 sql 查询,反之亦然。不能同时执行。问题是当我输入 123 时我得到一个空结果,因为在表 Props 中我没有任何带有 pk abc 的条目;-))) 您在INNER JOIN 查询大纲提示,这会消除任何NULL 值。 OUTER JOIN 应该照顾它。目前尚不清楚您是否可以为相同的pk 拥有多个4thElement5thElement。无论哪种方式,似乎已经建议的答案都可以完成这项工作。如果没有,您需要阐明您的要求。 【参考方案1】:

这应该可以完成工作,这通常是您需要的数据透视查询:

SELECT rel.pk, rel.1stElement, rel.2ndElement, rel.3rdElement 
     , MAX(CASE WHEN pro.Name = '4thElement' 
           THEN pro.ValueString 
           ELSE NULL
           END) as 4thElement
     , MAX(CASE WHEN pro.Name = '5thElement' 
           THEN pro.ValueString
           ELSE NULL
           END) as 5thElement
FROM Relation rel 
    LEFT OUTER JOIN Props pro 
        ON rel.pk = pro.pk
GROUP BY rel.pk, rel.1stElement, rel.2ndElement, rel.3rdElement

【讨论】:

感谢您的回复。我会尽快测试的

以上是关于针对不同输入元素的通用 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL 基本概念通用语法与分类

类似于 PhpMyAdmin 的 PHP 通用 SQL 查询和结果

获取特定子记录的 SQL 查询

翻译Flink Table 和 SQL API 概念与通用API

Mysql之库表操作(胖胖老师)

Oracle04基本查询+条件查询+排序+单行函数+通用函数介绍