|
128 Кб. |
|
| Всем привет.
Надо найти повторы.
tblResult
fldDate
fldPara
fldTeacher
fldTeacher
2 последних поля берут свои значения из таблицы.
надо найти повторы, где например
дата совпадает пара совпадает тичер совпадает
дата совпадает пара совпадает тичер2 совпадает
дата совпадает пара совпадает тичер совпадает с тичер2 (одинаковая дата, одинаковая пара, разный предмет) | |
|
| |
|
14 Кб. |
|
| Так? =>
можно конечно обойтись без запроса1
но мне показалось что так будет доходчивее
| |
|
| |
|
|
|
| честно - я не понял... записи то разные. в одной учитель = Петров, во второй учитель2 = Петров.
Я ее уже решил, спасибо за ответы. | |
|
| |
|
|
|
| есть стандартный запрос - повторяющиеся записи
в простых случаях можно пользоваться им
в более сложных случаях (и не только с повторяющимися записями) можно использовать подзапросы
принцип на примере
Select a1.*
From (
Select tbl.* From tbl
) as a1
т.е. в запросе старшего уровня используется не таблица или имя сохраненного запроса, а инструкция SQL
сколько может быть уровней подзапросов - не знаю, у меня получалось штук 10 воткнуть, дальше не пробывал - не было необходимости.
В примере который я вам послал используется 1 подзапрос и 1 сохраненный запрос
Тут главное принцип
а принцип такой - собирам значения полей в одно слово
дата & пара & тичер (столбец Совпадение1 в запросе)
после этого делаем запрос в котором группируем значения в столбце совпадение1 и считаем количество уникальных значений - отображаем только те у которых совпадений больше или равно 2 -т.е. совпадают (это подзапрос а1)
теперь имея список повторов делаем запрос и выбираем нужные значения
все
P.S. может я условие задания не правильно понял | |
|
| |
|
|
|
| Если вложенных запросов будет много, то такой запрос очень долго обрабатывается.
Решил (подсказали) вот так (сохранен как скл инструкция):
SELECT T1.fldDate, T1.fldPara, T1.id AS id_1, T1.fldTeacher AS fldTeacher_1, T1.fldTeacher2 AS fldTeacher2_1, T1.fldPredmet AS fldPredmet_1, T2.id AS id_2, T2.fldTeacher AS fldTeacher_2, T2.fldTeacher2 AS fldTeacher2_2, T2.fldPredmet AS fldPredmet_2
FROM tblResult AS T1 INNER JOIN tblResult AS T2 ON (T1.id<T2.id) AND ((T1.fldTeacher = T2.fldTeacher) OR (T1.fldTeacher2 = T2.fldTeacher2) OR
(T1.fldTeacher = T2.fldTeacher2) OR (T1.fldTeacher2 = T2.fldTeacher)) AND (T1.fldPara = T2.fldPara) AND (T1.fldDate = T2.fldDate); | |
|
| |