【发布时间】:2013-12-31 06:53:24
【问题描述】:
我有这 3 个查询,除了 where 语句之外几乎相同:
Insert into t1(f1,f2,f3)
SELECT t2.f1 AS f1, '' AS f2, t2.f2 AS f2, t3.f3 AS f3)
from t2
INNER JOIN t3 ON t2.f1 = t3.f1
WHERE (t2.f4 = 'n') and t2.f5 < '2013-04-01' and t2.f6 in('sss','ttt','ddd')
GROUP BY t2.f4, t2.f5, t2.f6;
Insert into t1(f1,f2,f3)
SELECT t2.f1 AS f1, '' AS f2, t2.f2 AS f2, t3.f3 AS f3)
from t2
INNER JOIN t3 ON t2.f1 = t3.f1
WHERE (t2.f4 = 'n') and t2.f5 > '2013-03-31' and t2.f6 in('sss','ttt','ddd')
GROUP BY t2.f4, t2.f5, t2.f6;
Insert into t1(f1,f2,f3)
SELECT t2.f1 AS f1, '' AS f2, t2.f2 AS f2, t3.f3 AS f3)
from t2
INNER JOIN t3 ON t2.f1 = t3.f1
WHERE (t2.f4 = 'n') and t2.f6 in('rrr','qqq','yyy')
GROUP BY t2.f4, t2.f5, t2.f6;
我不能像下面的查询一样将它们组合起来,理论上它们是相同的查询吗?因为我完全尝试过这个,当我测试结果时我得到了不同的输出。
Insert into t1(f1,f2,f3)
SELECT t2.f1 AS f1, '' AS f2, t2.f2 AS f2, t3.f3 AS f3)
from t2
INNER JOIN t3 ON t2.f1 = t3.f1
WHERE (t2.f4 = 'n') and (t2.f5 < '2013-04-01' or t2.f5 > '2013-03-31' and t2.f6 in
('sss','ttt','ddd')) or t2.f6 in ('rrr','ggg','yyy')
GROUP BY t2.f4, t2.f5, t2.f6;
我也试过这个,但它也不匹配(我几乎只是将前面的每一个 where 语句放在括号中,并在组合语句中添加了一个或):
Insert into t1(f1,f2,f3)
SELECT t2.f1 AS f1, '' AS f2, t2.f2 AS f2, t3.f3 AS f3)
from t2
INNER JOIN t3 ON t2.f1 = t3.f1
WHERE ((t2.f4 = 'n') and t2.f5 < '2013-04-01' and t2.f6 in('sss','ttt','ddd')) or
((t2.f4 = 'n') and t2.f5 > '2013-03-31' and t2.f6 in('sss','ttt','ddd')) or ((t2.f4 = 'n') and t2.f6 in('rrr','qqq','yyy'))
【问题讨论】: