| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > Проверка целостности |
| Автор: tishaishii 18.2.2012, 18:02 |
| Есть таблицы T1(ID, DOCTYPE, DOCID, DOCITEM) и T2(ID, ID_T1, DOCTYPE, DOCID, DOCITEM). T1.ID <=>> T2.ID_T1 То есть, в T2 ведётся история T1. Нужно составить запрос, который бы возвращал список T1.ID, в которых {T1.DOCTYPE, T1.DOCID, T1.DOCITEM} не соответствуют последним записям в T2. |
| Автор: Akina 18.2.2012, 20:00 |
В таблице остутствует штамп времени, соответственно неясно, что означает "последние"... |
| Автор: nellyk 20.2.2012, 00:02 | ||
SELECT T1.ID FROM T1,T2 WHERE T1.ID NOT IN (SELECT DISTINCT ID_T1 FROM T2) UNION SELECT T1.ID FROM T1, T2, (SELECT ID_T1, MAx(ID) AS ID_T2 FROM T2 GROUP BY ID_T1) T3 WHERE T1.ID=T3.ID_T1 AND T2.ID=T3.ID_T2 AND (T1.DOCTYPE <> T2.DOCTYPE OR T1.DOCID <> T2.DOCID OR T1.DOCITEM <> T2.DOCITEM) Сверху идентификаторы, отсутствующие в истории, снизу - те, у которых есть различия с последними "историческими" записями. |
| Автор: tishaishii 23.2.2012, 10:33 |
| "Последнее" - это последняя запись. Время - неоднозначный критерий. |
| Автор: Akina 23.2.2012, 20:06 |
Последняя при какой сортировке? потому как без сортировки такого понятия как "первая-последняя-прочее" не существует. Только если поле не уникально. |
| Автор: tishaishii 26.2.2012, 17:48 |
| Обычно, по-умолчанию, упорядочивание выполняется по первичному ключу. PK, предполагаю как T1.ID и T2.ID, FK предполагаю как T2.ID_T1. |
| Автор: tishaishii 29.2.2012, 06:39 |
| Ссылка на "бабушкин метод" пуста. Вобщем-то я задачу решил, может быть не самым эффективным способом, и закрыл возможность появления "нехороших" записей. |
| Автор: Zloxa 29.2.2012, 08:38 |
Можете и сами выполнить поиск на форуме http://forum.vingrad.ru/act-Search/CODE/show/searchid-4b3a7a81b96f13d704d19b0766635810/search_in-posts/result_type/posts/flag/search/highlite/%25D0%25B1%25D0%25B0%25D0%25B1%25D1%2583%25D1%2588%25D0%25BA%25D0%25B8%25D0%25BD+%25D0%25BC%25D0%25B5%25D1%2582%25D0%25BE%25D0%25B4/index.html. |