针对不同输入元素的通用 SQL 查询
Posted
技术标签:
【中文标题】针对不同输入元素的通用 SQL 查询【英文标题】:Universal SQL query for different input elements 【发布时间】:2013-04-17 14:11:54 【问题描述】:我在以下抽象示例上下文中遇到 SQL 查询问题:我的 sql 查询有 2 个不同的输入数据,定义为“MainElement”,其中一个的键为 123,另一个主元素的键为 789。
此外,我还有一个名为 Relation 的表,其中包含 pk
、FirstElement
、SecondElement
和 ThirdElement
列。
此外,还有一个名为 Props 的表,其中包含 pk
、name
和 valueString
列。关于此上下文的特殊功能是 Props 中的列 name
定义了另外 2 列称为 4thElement
和表 Relation 的 5thElement
作为一行,其值位于专栏valueString
。
|pk | 1stElement | 2ndElement | 3rdElement |
|abc|-----123----|-----456----|-----null---|
|def|-----789----|-----101112-|---131415---|
|Pk | Name | ValueString |
|def|4thElement|161718---|
|def|5thElement|ghi------|
如您所见,MainElement
789 在 Props 中具有 4thElement
和 5thElement
的值,但 MainElement
123 在 Props 中没有任何价值。
我需要的是一个通用 SQL 查询,其输入值为 1stElement
,例如 123 或 789,它返回两个主要元素的结果,与 MainElement
123 在 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
拥有多个 值4thElement
和5thElement
。无论哪种方式,似乎已经建议的答案都可以完成这项工作。如果没有,您需要阐明您的要求。
【参考方案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 查询的主要内容,如果未能解决你的问题,请参考以下文章
类似于 PhpMyAdmin 的 PHP 通用 SQL 查询和结果