【问题标题】:SQL Query - Improvement NeededSQL 查询 - 需要改进
【发布时间】:2012-04-03 09:34:53
【问题描述】:

我写了一个非常丑陋的 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

联合所有

   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;

【问题讨论】:

    标签: sql


    【解决方案1】:

    应该可以将其简化为:

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

    (这里有 3 个连接的 HUGE SELECT)t1

    LEFT JOIN 
    

    (这里有 3 个连接的 HUGE SELECT)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:(不知道我之前是怎么错过这个评论的。)不在 MS Access 中(据我所知)- SQL 的其他方言(包括 SQLServer)有一些叫做公用表表达式(CTE)的东西) 但这些在 Access 中不可用。
    • 嗨,没问题。很高兴你现在看到了:)。好吧,两个选择仍然比 4 好 :) 所以非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2016-12-18
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多