SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.07.2011 12:43:26

Ифмукт
Участник
Зарегистрирован: 08.07.2011
Сообщений: 3

Выборка данных из трёх таблиц

Народ, всем привет!

У меня вот такая замарочка:

SELECT persondataabiturients.fam, persondataabiturients.name, persondataabiturients.secondname, dataaboutenter.id_form_edu, persondataabiturients.id, dataaboutenter.id FROM persondataabiturients JOIN dataaboutenter ON persondataabiturients.id=dataaboutenter.id_abitur JOIN datadocprevedu ON persondataabiturients.id=datadocprevedu.id_abitur WHERE dataaboutenter.id_form_edu=1 AND dataaboutenter.id_spec=47 AND dataaboutenter.date_turn_doc='0000-00-00' AND dataaboutenter.kurs=1 AND datadocprevedu.id_type_doc=13 AND persondataabiturients.date_create>='2011-7-1 00:00:01' AND persondataabiturients.date_create<='2011-7-31 23:00:00' ORDER BY persondataabiturients.fam ASC, persondataabiturients.name ASC , persondataabiturients.secondname ASC

Запрос почти корректно выполняется, но! В таблице dataaboutenter есть две записи у которых поле id_spec=47, но поле id_form_edu РАЗНОЕ. Для одной записи 1, для втрой 2. Но в результате выборки отображаются обе эти записи, хотя должна выбраться только та, где id_form_edu=1. Кто подскажет где я косячу?

Неактивен

 

#2 08.07.2011 13:12:39

Ифмукт
Участник
Зарегистрирован: 08.07.2011
Сообщений: 3

Re: Выборка данных из трёх таблиц

Народ, сам разобрался что к чему :0) Запрос должен иметь вид:

SELECT persondataabiturients.fam, persondataabiturients.name, persondataabiturients.secondname, dataaboutenter.id_form_edu, persondataabiturients.id, dataaboutenter.id FROM persondataabiturients JOIN dataaboutenter ON persondataabiturients.id=dataaboutenter.id_abitur JOIN datadocprevedu ON persondataabiturients.id=datadocprevedu.id_abitur WHERE dataaboutenter.id_form_edu=2 AND dataaboutenter.id_spec=47 AND dataaboutenter.date_turn_doc='0000-00-00' AND dataaboutenter.kurs=1 AND datadocprevedu.id_type_doc=13 AND persondataabiturients.date_create>='2011-7-1 00:00:01' AND persondataabiturients.date_create<='2011-7-31 23:00:00' GROUP BY dataaboutenter.id_form_edu ORDER BY persondataabiturients.fam ASC, persondataabiturients.name ASC , persondataabiturients.secondname ASC

Групировка по проблемному параметру дала результат. Видимо, sql возвращает две копии одной и той же строки, поэтому и требуется группировать. Кто скажет почему так?

Неактивен

 

#3 08.07.2011 14:03:26

Ифмукт
Участник
Зарегистрирован: 08.07.2011
Сообщений: 3

Re: Выборка данных из трёх таблиц

Народ, это снова я :0)
На самом деле правильно сделать вот так:

SELECT persondataabiturients.fam, persondataabiturients.name, persondataabiturients.secondname, dataaboutenter.id_form_edu, persondataabiturients.id, dataaboutenter.id FROM persondataabiturients JOIN dataaboutenter ON persondataabiturients.id=dataaboutenter.id_abitur WHERE dataaboutenter.id_form_edu=1 AND dataaboutenter.id_spec=47 AND dataaboutenter.date_turn_doc='0000-00-00' AND dataaboutenter.kurs=1 AND persondataabiturients.date_create>='2011-7-1 00:00:01' AND persondataabiturients.date_create<='2011-7-31 23:00:00' GROUP BY persondataabiturients.id ORDER BY persondataabiturients.fam ASC, persondataabiturients.name ASC , persondataabiturients.secondname ASC

Групировать надо по ключевому полю главной таблицы

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson