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)
感谢您的回答。那么真的没有办法只写一次“有3个连接的巨大选择”? – taranaki 2012-04-03 17:22:03
@taranaki :(不知道我以前是怎么错过这个评论的。)不是在MS Access中(据我所知) - SQL的其他方言(包括SQLServer)有一些称为Common Table Expressions(CTE)的东西,但它们不可用访问。 – 2012-04-10 10:19:46
嗨,没问题。很高兴你现在看到它:)。那么,两个选择仍然比4更好:)所以非常感谢你的帮助。 – taranaki 2012-04-11 12:50:22