这是我的sql
SELECT * FROM A
INNER JOIN B ON A.ID = B.ID
INNER JOIN C ON C.ID2 = B.ID2
WHERE (
(
C.ST_DT >= TO_DATE('2014/04/08 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
AND
C.ST_DT < TO_DATE('2014/04/09 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
)
)
OR (
(
C.ST_DT <= TO_DATE('2014/04/08 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
AND
C.EN_DT > TO_DATE('2014/04/09 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
)
)
AND C.IS_MAIN = '1'
---编辑---------------------------------------- -------------------------------------
我得到了这个结果
ID ID2 ST_DT EN_DT TYPE MOD_DT
---------------------------------------------------------------------------
1 a1 2014/04/01 14:00:00 2014/04/10 14:00:00 0 2014/04/01 10:00:00
2 a1 2014/04/01 14:30:00 2014/04/10 14:00:00 1 2014/04/01 09:00:00
3 b1 2014/03/03 14:30:00 2014/04/15 14:00:00 1 2014/03/08 10:00:00
4 c4 2014/03/05 14:30:00 2014/04/20 14:00:00 1 2014/04/08 10:00:00
5 a1 2014/03/23 14:40:00 2014/03/30 14:00:00 0 2014/03/24 10:00:00
我想得到这个结果
ID ID2 ST_DT EN_DT TYPE MOD_DT
---------------------------------------------------------------------------
3 b1 2014/03/03 14:30:00 2014/04/15 14:00:00 1 2014/03/08 10:00:00
4 c4 2014/03/05 14:30:00 2014/04/20 14:00:00 1 2014/04/08 10:00:00
5 a1 2014/03/23 14:40:00 2014/03/30 14:00:00 0 2014/03/24 10:00:00
原点ID 1和2我不想得到。因为ID 1的MOD_DT < ST_DT
和TYPE是0.但我希望得到ID 5。
我可以在......之后添加if
吗?谢谢。
答案 0 :(得分:0)
试试这个,在你的脚本中再添加一个条件。
SELECT * FROM A
INNER JOIN B ON A.ID = B.ID
INNER JOIN C ON C.ID2 = B.ID2
WHERE (
(
C.ST_DT >= TO_DATE('2014/04/08 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
AND
C.ST_DT < TO_DATE('2014/04/09 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
)
)
OR (
(
C.ST_DT <= TO_DATE('2014/04/08 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
AND
C.EN_DT > TO_DATE('2014/04/09 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
)
)
AND C.IS_MAIN = '1'
and (
(MOD_DT < ST_DT and TYPE =0)
OR
1=1
)
答案 1 :(得分:0)
你错过了一个括号。您有X OR Y AND Z
作为条件。它必须是(X OR Y) AND Z
。你也有额外的括号也无济于事。
SELECT * FROM A
INNER JOIN B ON A.ID = B.ID
INNER JOIN C ON C.ID2 = B.ID2
WHERE (
(C.ST_DT >= TO_DATE('2014/04/08 00:00:00', 'yyyy/mm/dd hh24:mi:ss') AND C.ST_DT < TO_DATE('2014/04/09 00:00:00', 'yyyy/mm/dd hh24:mi:ss'))
OR
(C.ST_DT <= TO_DATE('2014/04/08 00:00:00', 'yyyy/mm/dd hh24:mi:ss') AND C.EN_DT > TO_DATE('2014/04/09 00:00:00', 'yyyy/mm/dd hh24:mi:ss'))
)
AND C.IS_MAIN = '1'