Показать сообщение отдельно
  #2  
Старый 07.10.2012, 10:25
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от niggle
У спортсменки Сысоева, есть несколько разрядов. Полученных в разные даты.
Почему её выводит несколько раз? Не могу догнать и всё
Потому что здесь:
Код:
FROM  otdel, groupS, kdGroup, trener, sports, data, razrad, kodrazr
у тебя происходит декартово умножение таблиц (CROSS JOIN), т.е. из 8-ми таблиц ты получаешь одну мегатаблицу в которую включаются все поля (колонки) этих таблиц и все возможные сочетания записей этих таблиц, при этом количество записей этой мегатаблицы будет равно произведению количества записей исходных 8-таблиц. После этого из этой таблицы отсеиваются записи которые не удовлетворяют условиям в WHERE. А где у тебя в WHERE есть условие, что нужно выводить только последние разряды? - Нету - Поэтому эти записи не отсеиваются и выводятся все.

Цитата:
Сообщение от niggle
Как сделать так чтобы запись выводилась только один раз, причем с последним полученным разрядом.
Попробуй, например, добавить такое условие:
Код:
AND razrad.Дата_присвоения = (SELECT MAX(razrad2.Дата_присвоения)
                              FROM razrad AS razrad2
                              WHERE sports.код_спортсмена = razrad2.код_спортсмена)

Цитата:
Сообщение от niggle
Проблема в Запросе? или в структуре БД?
А вообще лучше "CROSS JOIN" не использовать. Намного удобнее и понятнее вместо этого использовать "LEFT OUTER JOIN".
Ответить с цитированием