SQL查询 - 需要改进

SQL查询 - 需要改进

问题描述:

我写了一个非常难看的SQL查询,老实说,我很尴尬地发布它在这里......但我需要一些关于4个SELECT语句的帮助。有没有更好的方式来做到这一点,而不创建该表?SQL查询 - 需要改进

我不确定巨大的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加入)笔

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

( 巨大的SELECT这里有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 

( HUGE在这里选择用3联接)吨

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

( HUGE在这里选择用3联接)吨

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标识,EntryNo;

它应该能够简化这有点像:

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

(HUGE在这里选择3个连接)T1

LEFT JOIN 

(HUGE在这里选择3个连接)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) 
+0

感谢您的回答。那么真的没有办法只写一次“有3个连接的巨大选择”? – taranaki 2012-04-03 17:22:03

+0

@taranaki :(不知道我以前是怎么错过这个评论的。)不是在MS Access中(据我所知) - SQL的其他方言(包括SQLServer)有一些称为Common Table Expressions(CTE)的东西,但它们不可用访问。 – 2012-04-10 10:19:46

+0

嗨,没问题。很高兴你现在看到它:)。那么,两个选择仍然比4更好:)所以非常感谢你的帮助。 – taranaki 2012-04-11 12:50:22