Я написал чрезвычайно уродливый 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;
благодарит за ответ. Таким образом, по-настоящему невозможно просто написать «огромный выбор с тремя объединениями» один раз? – taranaki
@taranaki: (Не знаю, как я пропустил этот комментарий раньше.) Не в MS Access (насколько я знаю) - другие диалекты SQL (включая SQLServer) имеют нечто, называемое Common Table Expressions (CTE), но они недоступны в Доступ. –
привет, без проблем. Рад, что вы это видели сейчас :). Ну, два выбора еще лучше, чем 4 :) Так что спасибо за вашу помощь. – taranaki