2012-04-03 3 views
1

Я написал чрезвычайно уродливый SQL-запрос, и, честно говоря, я очень смущен, чтобы опубликовать его здесь ... Но мне нужна помощь в отношении четырех операторов SELECT, которые являются одинаковыми. Есть ли лучший способ сделать это, не создавая эту таблицу?SQL Query - Требуется совершенствование

Я не уверен, что содержимое огромного 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 

( ОГРОМНЫЙ ВЫБОР ЗДЕСЬ с 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 присоединяется) т

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

( ОГРОМНЫЙ ВЫБОР ЗДЕСЬ с 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 Id, EntryNo;

ответ

2

Должна быть предусмотрена возможность упростить это что-то вроде:

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

(ОГРОМНЫЙ ВЫБОР ЗДЕСЬ с 3 присоединяется) t1

LEFT JOIN 

(ОГРОМНЫЙ ВЫБОР ЗДЕСЬ с 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

благодарит за ответ. Таким образом, по-настоящему невозможно просто написать «огромный выбор с тремя объединениями» один раз? – taranaki

+0

@taranaki: (Не знаю, как я пропустил этот комментарий раньше.) Не в MS Access (насколько я знаю) - другие диалекты SQL (включая SQLServer) имеют нечто, называемое Common Table Expressions (CTE), но они недоступны в Доступ. –

+0

привет, без проблем. Рад, что вы это видели сейчас :). Ну, два выбора еще лучше, чем 4 :) Так что спасибо за вашу помощь. – taranaki

Смежные вопросы