我正在尝试编写一个Oracle查询,该查询将填充数据库以外的一组数据中缺少的字段。
也就是说,我将拥有数据
+----+-----+-----+
|Name|Name2|Name3|
+----+-----+-----+
|A |1 | |
+----+-----+-----+
|B |1 | |
+----+-----+-----+
|C |2 | |
+----+-----+-----+
|Z |39 | |
+----+-----+-----+
|... |... |... |
+----+-----+-----+
|... |... |... |
+----+-----+-----+
|... |... |... |
+----+-----+-----+
|QF |893 | |
+----+-----+-----+名称是唯一的,并且不在数据库中。
Name2不是唯一的,它存在于数据库内部和外部。
Name3是未知和所需的,不是唯一的,由Name2定义( Name2和Name3之间的映射是一对一的),并且在数据库中。
sql中的单个查询可以这样建模,
SELECT MY_TABLE.Name3 FROM MY_TABLE WHERE MY_TABLE.Name2='1'而且我知道应该将查询返回的内容放到数据的前两行中。
然后,我可以对其余行重复此操作
SELECT MY_TABLE.Name3 FROM MY_TABLE WHERE MY_TABLE.Name2='2'尽管这将需要我编写和运行数千个单独的select语句,并复制语句返回的内容,无论Name2重复多少次。
有没有一种方法可以编写一条select语句来填充我缺少的列,记住列名不在数据库中,并且编写查询所需的时间并不重要?
理想的查询应该是这样的,
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');这将返回已经很好地设置的数据。
+----+-----+-----------------+
|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数据。
有什么想法吗?
发布于 2014-01-16 05:58:18
我最终得到了一个不太理想的解决方案,
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中,但它确实正确地输出了,
Name, Name2, Name3
A 1 returned_value1
B 1 returned_value1
C 2 returned_value54
...https://stackoverflow.com/questions/21144891
复制相似问题