SQL查询 - 需要改进

时间:2012-04-03 09:34:53

标签: sql

我编写了一个非常难看的SQL查询,说实话我在这里发布它很尴尬......但是我需要一些关于4个SELECT语句的帮助。如果没有创建该表,有没有更好的方法呢?

我不确定巨大的SELECT的内容是否与回答这个问题有关。如果是,我会尝试将该查询。 (但是因为我高度简化了可能很难做到的整个例子。)

非常感谢任何帮助。

(这个问题是我在这里提出的另一个问题的后续问题:Comparing "Consecutive" Rows in Ms Access

SELECT t2.* FROM 
  (SELECT t.ID, t.SubID, t.Time, t.Value, t.value2, t.value
   FROM 

( 巨大的选择在这里有3个连接)t

   WHERE t.Time=4)  AS t2 
           LEFT JOIN 
   (SELECT t.ID, t.SubID, t.Time, t.Value, t.value2, t.value
    FROM

( 巨大的选择在这里有3个连接)t

    WHERE t.Time=3)  AS t1 
         ON t2.Id = t1.Id
         WHERE t2.value<>t1.value
         OR t2.value2<>t1.value2 
         OR t1.Id Is Null

UNION ALL

   SELECT t1.* FROM
   (SELECT t.ID, t.SubID, t.Time, t.Value, t.value2, t.value
    FROM

( 巨大的选择在这里有3个连接)t

     WHERE t.Time=3) AS t1
           LEFT JOIN
    (SELECT t.ID, t.SubID, t.Time, t.Value, t.value2, t.value
    FROM

( 巨大的选择在这里有3个连接)t

    WHERE t.Time=4) AS t2
          ON t1.Id=t2.Id
          WHERE t1.value<>t2.value
         OR t1.value2<>t2.value2 
          OR t2.Id Is Null

ORDER BY Id,EntryNo;

1 个答案:

答案 0 :(得分:2)

应该可以将其简化为:

SELECT t1.ID, t1.SubID, t1.Time, t1.Value, t1.value2, t1.value FROM

(HUGE SELECT HERE WITH 3 join)t1

LEFT JOIN 

(HUGE SELECT HERE WITH 3 join)t2

     ON ( t2.Id = t1.Id AND t1.Time <> t2.Time and T2.Time in (3,4) )
     WHERE T1.Time in (3,4) and
           (t2.value<>t1.value OR t2.value2<>t1.value2 OR t2.Id Is Null)