Oracle - 复杂的SQL查询

时间:2014-12-22 11:22:16

标签: sql oracle

sql我有一个方案,想要为constant condition data之一query以及我们要添加的constant data添加sub query值来自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'. 将是这样的(因为大多数sql数据是保密的,我能够共享实际查询)。

subselect

问题data将返回一组ORA-01427: single-row subquery returns more than one row。所以我收到错误best

此外,rows解决此问题的方法是什么。

简单地说:方案是,我想基于来自another行但来自同一父对象的值来计算一个joins值。

据我所知,现在 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

相反,我想要

   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
   --------------------------------------------

更新了问题

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

获取

表值:

6

但是在购买日期,我的add值为subtractstay start datecondition_value来自purchase date。所有2011-08-25都属于一个父对象的地方,我将通过其父表确定

输出:我想将6计算为2011-08-19(保持开始日期)+ {{1}} (购买日期)= {{1}}

2 个答案:

答案 0 :(得分:1)

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

这样的事情
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'

祝你好运。

答案 1 :(得分: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'