Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Запрос Delete c Inner join  [new]
mikola123
Member [заблокирован]

Откуда:
Сообщений: 14
КАК ЗАСТАВИТЬ ЭТО РАБОТАТЬ??? Почему Delete не хочет работать с Inner Join???

DELETE FROM VOB06 INNER JOIN
(SELECT VOB06.NAME1, VOB06.NAME2, VOB06.NAME3, VOB06.BIRTH_DATE, MIN(VOB06.START) AS MIN_START
FROM (SELECT VOB06.NAME1, VOB06.NAME2, VOB06.NAME3, VOB06.BIRTH_DATE,MIN(VOB06.UP_DATE) AS MIN_UD FROM
(
(SELECT NAME1,NAME2,NAME3,BIRTH_DATE,COUNT(NAME1) FROM VOB06 GROUP BY NAME1,NAME2,NAME3,BIRTH_DATE HAVING COUNT(NAME1)>1)
AS V INNER JOIN VOB06 ON (V.NAME1=VOB06.NAME1)AND(V.NAME2=VOB06.NAME2)AND(V.NAME3=VOB06.NAME3)AND(V.BIRTH_DATE=VOB06.BIRTH_DATE)
)
INNER JOIN STREET2 ON VOB06.STRT_CODE=STREET2.CODE
GROUP BY VOB06.NAME1, VOB06.NAME2, VOB06.NAME3, VOB06.BIRTH_DATE
) AS VV INNER JOIN VOB06 ON (VV.MIN_UD = VOB06.UP_DATE) AND (VV.BIRTH_DATE = VOB06.BIRTH_DATE) AND (VV.NAME3 = VOB06.NAME3) AND (VV.NAME2 = VOB06.NAME2) AND (VV.NAME1 = VOB06.NAME1)
GROUP BY VOB06.NAME1, VOB06.NAME2, VOB06.NAME3, VOB06.BIRTH_DATE) AS VVV ON VVV.NAME1=VOB06.NAME1
16 сен 08, 10:08    [6188667]     Ответить | Цитировать Сообщить модератору
 Re: Запрос Delete c Inner join  [new]
12345зайчик
Guest
видел такие запросы только у знатоков и ке....

переписывайте
и делайте чем проще - тем лучше

нужно ли обязательно подзапросы?
постоянных таблиц или курсоров с условиями ограничения недостаточно?

да, просьба - офрмляйте скрипты с тегами и оформлением по-человечьи
прочитать невозможно
  select * ;
             from ...
    
16 сен 08, 10:27    [6188771]     Ответить | Цитировать Сообщить модератору
 Re: Запрос Delete c Inner join  [new]
12345зайчик
Guest
сделал за Вас,
может кто-то будет копать - но на мой взгляд это бред,
кто-то накрутил и хотел что-бы кто-нибудь убился

DELETE ;
	FROM VOB06 ;
		INNER JOIN (SELECT VOB06.NAME1, ;
						   VOB06.NAME2, ;
						   VOB06.NAME3, ;
						   VOB06.BIRTH_DATE, ;
						   MIN(VOB06.START) AS MIN_START  ;
						FROM (SELECT VOB06.NAME1, ;
									 VOB06.NAME2, ;
									 VOB06.NAME3, ;
									 VOB06.BIRTH_DATE, ;
									 MIN(VOB06.UP_DATE) AS MIN_UD ;
								FROM((SELECT NAME1,NAME2,NAME3,BIRTH_DATE,COUNT(NAME1) ; 
											FROM VOB06 ;
											GROUP BY NAME1,NAME2,NAME3,BIRTH_DATE ;
											HAVING COUNT(NAME1)>1) AS V ;
												INNER JOIN VOB06 ON (V.NAME1=VOB06.NAME1)AND(V.NAME2=VOB06.NAME2)AND(V.NAME3=VOB06.NAME3)AND(V.BIRTH_DATE=VOB06.BIRTH_DATE) ;
							  		  ) ;
									INNER JOIN STREET2 ON VOB06.STRT_CODE=STREET2.CODE ;
							GROUP BY VOB06.NAME1, VOB06.NAME2, VOB06.NAME3, VOB06.BIRTH_DATE) AS VV  ;
		INNER JOIN VOB06 ON (VV.MIN_UD = VOB06.UP_DATE) AND (VV.BIRTH_DATE = VOB06.BIRTH_DATE) AND (VV.NAME3 = VOB06.NAME3) AND (VV.NAME2 = VOB06.NAME2) AND (VV.NAME1 = VOB06.NAME1) ;
	GROUP BY VOB06.NAME1, VOB06.NAME2, VOB06.NAME3, VOB06.BIRTH_DATE) AS VVV ON VVV.NAME1=VOB06.NAME1
16 сен 08, 10:36    [6188820]     Ответить | Цитировать Сообщить модератору
 Re: Запрос Delete c Inner join  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
В общем случае, если в команде DELETE используется опция FROM, то надо конкретизировать из какой таблицы удалять будем, явно указав эту таблицу сразу за опцией DELETED

DELETE VOB06 FROM ...

Но вообще-то, 12345зайчик прав. Вы сами-то хоть понимаете что именно удалит этот запрос? А если понадобиться что-то изменить в алгоритме отбора удаляемых записей?

Запрос явно перегружен совершенно не нужными подзапросами и лишними таблицами-источниками. Ну, вот зачем Вы вообще использовали таблицу STREET2 и с чем ее связываете?

У Вас запрос (без команды DELETE) будет работать? Ну, если вместо DELETE написать

SELECT * FROM ...
16 сен 08, 12:11    [6189488]     Ответить | Цитировать Сообщить модератору
 Re: Запрос Delete c Inner join  [new]
mikola123
Member [заблокирован]

Откуда:
Сообщений: 14
Там написанно все как надо, такая куча подзапросов, только потому что, задача состоит из трех подзадач, которые реализуется поэтапным отбором!!! И в конце все, что получится нужно удалить, поэтому используется такая громоздкая запись
16 сен 08, 14:30    [6190593]     Ответить | Цитировать Сообщить модератору
 Re: Запрос Delete c Inner join  [new]
mikola123
Member [заблокирован]

Откуда:
Сообщений: 14
12345зайчик
видел такие запросы только у знатоков и ке....

переписывайте
и делайте чем проще - тем лучше

нужно ли обязательно подзапросы?
постоянных таблиц или курсоров с условиями ограничения недостаточно?

да, просьба - офрмляйте скрипты с тегами и оформлением по-человечьи
прочитать невозможно
  select * ;
             from ...
    


рад был бы сделать проще, ан нет не получится ((
16 сен 08, 14:32    [6190609]     Ответить | Цитировать Сообщить модератору
 Re: Запрос Delete c Inner join  [new]
mikola123
Member [заблокирован]

Откуда:
Сообщений: 14
ВладимирМ
В общем случае, если в команде DELETE используется опция FROM, то надо конкретизировать из какой таблицы удалять будем, явно указав эту таблицу сразу за опцией DELETED

DELETE VOB06 FROM ...

Но вообще-то, 12345зайчик прав. Вы сами-то хоть понимаете что именно удалит этот запрос? А если понадобиться что-то изменить в алгоритме отбора удаляемых записей?

Запрос явно перегружен совершенно не нужными подзапросами и лишними таблицами-источниками. Ну, вот зачем Вы вообще использовали таблицу STREET2 и с чем ее связываете?

У Вас запрос (без команды DELETE) будет работать? Ну, если вместо DELETE написать

SELECT * FROM ...


Огромное пасиб!!! Именно это и надо было сделать!!!
DELETE VOB06 FROM ...
16 сен 08, 14:34    [6190633]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить