首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编写一个常量不断变化的Oracle查询

编写一个常量不断变化的Oracle查询
EN

Stack Overflow用户
提问于 2014-01-16 01:58:49
回答 1查看 82关注 0票数 2

我正在尝试编写一个Oracle查询,该查询将填充数据库以外的一组数据中缺少的字段。

也就是说,我将拥有数据

代码语言:javascript
运行
复制
+----+-----+-----+
|Name|Name2|Name3|
+----+-----+-----+
|A   |1    |     |
+----+-----+-----+
|B   |1    |     |
+----+-----+-----+
|C   |2    |     |
+----+-----+-----+
|Z   |39   |     |
+----+-----+-----+
|... |...  |...  |
+----+-----+-----+
|... |...  |...  |
+----+-----+-----+
|... |...  |...  |
+----+-----+-----+
|QF  |893  |     |
+----+-----+-----+

名称是唯一的,并且不在数据库中。

Name2不是唯一的,它存在于数据库内部和外部。

Name3是未知和所需的,不是唯一的,由Name2定义( Name2和Name3之间的映射是一对一的),并且在数据库中。

sql中的单个查询可以这样建模,

代码语言:javascript
运行
复制
SELECT MY_TABLE.Name3 FROM MY_TABLE WHERE MY_TABLE.Name2='1'

而且我知道应该将查询返回的内容放到数据的前两行中。

然后,我可以对其余行重复此操作

代码语言:javascript
运行
复制
SELECT MY_TABLE.Name3 FROM MY_TABLE WHERE MY_TABLE.Name2='2'

尽管这将需要我编写和运行数千个单独的select语句,并复制语句返回的内容,无论Name2重复多少次。

有没有一种方法可以编写一条select语句来填充我缺少的列,记住列名不在数据库中,并且编写查询所需的时间并不重要?

理想的查询应该是这样的,

代码语言:javascript
运行
复制
SELECT Name, MY_TABLE.Name2, MY_TABLE.Name3 FROM MY_TABLE WHERE 
   (MAGICALLY_SET Name = 'A' AND
    Name2 = '1') OR
   (MAGICALLY_SET Name = 'B' AND
    Name2 = '1') OR
   (MAGICALLY_SET Name = 'C' AND
    Name2 = '2')
   ...
   (MAGICALLY_SET Name = 'QF' AND
    Name2 = '893');

这将返回已经很好地设置的数据。

代码语言:javascript
运行
复制
+----+-----+-----------------+
|Name|Name2|Name3            |
+----+-----+-----------------+
|A   |1    |returned_value1  |
+----+-----+-----------------+
|B   |1    |returned_value1  |
+----+-----+-----------------+
|C   |2    |returned_value54 |
+----+-----+-----------------+
|Z   |39   |returned_value87 |
+----+-----+-----------------+
|... |...  |...              |
+----+-----+-----------------+
|... |...  |...              |
+----+-----+-----------------+
|... |...  |...              |
+----+-----+-----------------+
|QF  |893  |returned_value439|
+----+-----+-----------------+

我曾尝试编写更改常量名称值的select语句,并使用dual,但我不认为我在正确的轨道上。

如果Name在一个表中,我知道我可以为此编写一个查询。但是不能创建一个新的表,然后插入所有的Name/Name2数据。

有什么想法吗?

EN

Stack Overflow用户

发布于 2014-01-16 05:58:18

我最终得到了一个不太理想的解决方案,

代码语言:javascript
运行
复制
SELECT 'A' AS Name, Name2, Name3 FROM MY_TABLE WHERE NAME2 = '1' UNION ALL
SELECT 'B' AS Name, Name2, Name3 FROM MY_TABLE WHERE NAME2 = '1' UNION ALL
SELECT 'C' AS Name, Name2, Name3 FROM MY_TABLE WHERE NAME2 = '2' UNION ALL
...

它可以被包装在一个select * from中,但它确实正确地输出了,

代码语言:javascript
运行
复制
Name, Name2, Name3
A     1      returned_value1
B     1      returned_value1
C     2      returned_value54
...
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21144891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档