Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 задвоение данных  [new]
dem59
Member

Откуда:
Сообщений: 4
нужно построить иерархию
известно родитель каждого объекта, запрос прилагаю, почему данные задваиваются или даж затраиваются, может есть другой способ построить...

 FROM
	 dm_sysobject_s doc_s,
	 dt_document_s doc,
	 dt_node_s res_n,
     dt_resolution_s res, 
	 dm_sysobject_s res_s 
	 LEFT OUTER JOIN  dt_instruction_s ins on (ins.id_resolution = res_s.i_chronicle_id AND ins.i_partition = 4000 )
	 LEFT OUTER JOIN  dt_node_s ins_n on (ins.r_object_id = ins_n.r_object_id AND ins.i_partition = 4000)
	 
	 LEFT OUTER JOIN dt_node_s res_n1 ON ( res_n1.id_parent = res_s.i_chronicle_id AND res_n1.i_partition = 3000 AND res_n1.n_state = (100))
	 LEFT OUTER JOIN dt_resolution_s res1 ON (res1.r_object_id = res_n1.r_object_id  AND res1.i_partition = 3000 and res1.id_author = ins.id_plan_performer)
	 LEFT OUTER JOIN dm_sysobject_s res_s1 ON (res_s1.r_object_id = res1.r_object_id  AND res_s1.i_partition = 3000)
	 LEFT OUTER JOIN dt_instruction_s ins1 ON (ins1.id_resolution = res_s1.i_chronicle_id AND ins1.i_partition = 4000 AND ins1.n_kind = 2)
	 LEFT OUTER JOIN dt_node_s ins_n1 ON (ins_n1.r_object_id = ins1.r_object_id AND ins_n1.i_partition = 4000 AND ins_n1.n_state IN (130, 140, 150))
	 LEFT OUTER JOIN dt_appointment_s app ON ( ins1.id_plan_performer = app.r_object_id AND app.i_partition = 108)
	 LEFT OUTER JOIN dt_employee_s emp ON (app.id_employee = emp.r_object_id AND emp.i_partition = 102)
	 LEFT OUTER JOIN dm_sysobject_s emp_so ON (emp.r_object_id = emp_so.r_object_id AND emp_so.i_partition = 102)
		
		where
		doc.r_object_id = doc_s.r_object_id
		and res.r_object_id = res_n.r_object_id
		and res.r_object_id = res_s.r_object_id
		and res_n.id_parent = doc_s.i_chronicle_id
		AND res.n_kind IN (0, 1, 2) AND res_n.n_state = (100)		
		AND doc_s.i_partition IN (2000, 2200, 2300)
		AND res_n.i_partition = 3000
		AND res.i_partition = 3000 
		AND res_s.i_partition = 3000


Сообщение было отредактировано: 21 май 13, 17:17
21 май 13, 17:17    [14328657]     Ответить | Цитировать Сообщить модератору
 Re: задвоение данных  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Ошибка у вас в запросе, вот и "задваиваются или даж затраиваются".
21 май 13, 17:18    [14328667]     Ответить | Цитировать Сообщить модератору
 Re: задвоение данных  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
вот как можно было написать половину запроса через запятые, а вторую - через join-ы?
21 май 13, 17:20    [14328686]     Ответить | Цитировать Сообщить модератору
 Re: задвоение данных  [new]
Glory
Member

Откуда:
Сообщений: 104751
dem59
почему данные задваиваются или даж затраиваются

Как написали, так и задваиваются/затраиваются


dem59
может есть другой способ построить...

наверняка есть
21 май 13, 17:22    [14328705]     Ответить | Цитировать Сообщить модератору
 Re: задвоение данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32178
dem59
почему данные задваиваются или даж затраиваются
Удаляйте понемногу таблицы из запроса, так и найдёте причину.
Потом подумаете о логике запроса и исправите ошибку (тут никто не поможет, мы же не знаем вашу модель данных).
21 май 13, 19:21    [14329313]     Ответить | Цитировать Сообщить модератору
 Re: задвоение данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32178
alexeyvg
dem59
почему данные задваиваются или даж затраиваются
Удаляйте понемногу таблицы из запроса, так и найдёте причину.
Потом подумаете о логике запроса и исправите ошибку (тут никто не поможет, мы же не знаем вашу модель данных).
Для начала можно закомментарить веь блок с LEFT OUTER JOIN. Потом "делением пополам" найти ошибку
21 май 13, 19:22    [14329317]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить