Задавайте вопросы, мы ответим
Вы не зашли.
Народ, всем привет!
У меня вот такая замарочка:
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. Кто подскажет где я косячу?
Неактивен
Народ, сам разобрался что к чему :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 возвращает две копии одной и той же строки, поэтому и требуется группировать. Кто скажет почему так?
Неактивен
Народ, это снова я :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
Групировать надо по ключевому полю главной таблицы
Неактивен