Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle-复杂sql查询_Sql_Oracle - Fatal编程技术网

Oracle-复杂sql查询

Oracle-复杂sql查询,sql,oracle,Sql,Oracle,在sql中,我得到了一个场景,比如向查询的条件数据之一添加一个常量值,我们要添加的常量数据来自子查询。粗略的sql将是这样的,因为大多数sql数据都是机密的,我无法共享实际的查询 SELECT * FROM test_table tt INNER JOIN test_table_1 tt1 ON tt.id = tt1.id WHERE TO_DATE(tt1.CONDITION_VALUE, 'yyyy-mm-dd') >= TO_DATE('2011

在sql中,我得到了一个场景,比如向查询的条件数据之一添加一个常量值,我们要添加的常量数据来自子查询。粗略的sql将是这样的,因为大多数sql数据都是机密的,我无法共享实际的查询

SELECT * FROM test_table tt
  INNER JOIN test_table_1 tt1
    ON tt.id = tt1.id
  WHERE TO_DATE(tt1.CONDITION_VALUE, 'yyyy-mm-dd') >=
          TO_DATE('2011-08-25', 'yyyy-mm-dd') + (SELECT CONDITION_VALUE
                                                   FROM test_table tt
                                                   INNER JOIN test_table_1 tt1
                                                     ON tt.id = tt1.id
                                                   WHERE CONDITION_SEQUENCE='2') AND
        CONDITION_SEQUENCE='1'.
问题是subselect将返回一组数据。所以我得到了错误ORA-01427:单行子查询返回多行

还有,解决这个问题的最佳方式是什么

简单地说:这个场景是,我想计算一行的值,基于另一行的值,但是相同父对象的值

据我所知,现在连接的行为是这样的

    obj1.data + [set of subquery data]
    obj2.data + [set of subquery data]
    ....
    objN.data + [set of subquery data]
相反,我想要喜欢

    obj1.data + obj1.anotherData
    obj2.data + obj2.anotherData
    ....
    objN.data + objN.anotherData
更新问题

输入是购买日期从:2011-08-19到:2011-08-25,我将从UI获得

表值:

   id | CONDITION_SEQUENCE | CONDITION_VALUE |
   ------------------------|------------------
   1  | 1                  | 6               | --- purchase date
   2  | 1                  | 4               |
   3  | 2                  | 2011-08-25      | --- stay start date
   4  | 1                  | 2011-11-25      | --- stay end date
   --------------------------------------------
但是在购买日期中,我有一个值6,我想在开始日期加上或减去它。其中所有条件_值都属于一个父对象,我将通过其父表来确定

输出:我想将购买日期计算为2011-08-25停留开始日期+6
购买日期=2011-08-19

要完成你似乎想要做的事情,你可以尝试以下方法

SELECT *
  FROM test_table tt
  INNER JOIN test_table_1 tt1
    ON tt.id = tt1.id
  WHERE TO_DATE(tt1.CONDITION_VALUE, 'yyyy-mm-dd') >=
          TO_DATE('2011-08-25', 'yyyy-mm-dd') + tt.CONDITION_VALUE AND
        tt.CONDITION_SEQUENCE = '2' AND
        tt1.CONDITION_SEQUENCE = '1'

祝你好运。

据我所知,你可以试试下面的方法

SELECT tt.*,tt1.* FROM test_table tt
  INNER JOIN test_table_1 tt1
    ON tt.id = tt1.id
  INNER JOIN 
 test_table tt2
on tt.id = tt2.id 
  and tt2.CONDITION_SEQUENCE='2'
  WHERE TO_DATE(tt1.CONDITION_VALUE, 'yyyy-mm-dd') >=
          (TO_DATE('2011-08-25', 'yyyy-mm-dd') + tt2.CONDITION_VALUE) 
AND tt.CONDITION_SEQUENCE='1'

要在何处条件或中添加的位置column@Exhausted在where条件下,请编辑您的问题并提供示例数据和所需结果。你的问题显示了一个无效的查询,没有解释你想做什么。@Gordon Linoff是的,我明白了。我更新了我的问题你的更新没有帮助。您使用的列和表达式不在数据中。用示例数据和期望的结果编辑您的问题。您好,谢谢您的时间,我从您的答案中得到了一些想法,因此我将尝试“我无法测试您的解决方案,主要是因为我的问题很难解释,我只是计划使用java解决方案,如果您不介意,您可以加入chat.stackoverflow.com/rooms/592/mysql-and-relational-databases或chat.stackoverflow.com/rooms/66379/oracle谢谢您的回答,让我试试,另外,我还试图避免额外的内部连接内部子query@Suganthan我认为这可能是一种有效的方法,而不是每次都询问过滤器让我检查的位置。。。我会给你一些时间。在db中,我也有一些其他问题,那就是阻止我如果你不能加入聊天室或