Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / связанный запрос на удаление / 25 сообщений из 27, страница 1 из 2
23.09.2003, 07:53
    #32272372
dishlo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
пишу

Код: plaintext
1.
delete t1.*
from table1 t1 inner join table2 t2 on t1.column1 = t2.column1

говорит
Невозможно удаление записей из указанных таблиц.

хотя это работает
Код: plaintext
delete t1.* from table1 t1 

Вопрос: как написать связанный запрос на удаление?

вариант
Код: plaintext
1.
2.
delete t1.*
from table1 
where t1.column1 in (select t2.column1 from t1 table2 t2)

не подходит потому что у меня реально в запросе связь по двум столбцам:

Код: plaintext
1.
2.
delete t1.*
from table1 t1 
inner join table2 t2 on t1.column1 = t2.column1 and t1.column2 = t2.column2
...
Рейтинг: 0 / 0
23.09.2003, 08:13
    #32272381
tpg
tpg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
???
Код: plaintext
1.
2.
delete t1.*
from table1 t1 
where t1.column1 in (select t2.column1 from table2 t2 where t1.column1 = t2.column1 and t1.column2 = t2.column2)
...
Рейтинг: 0 / 0
23.09.2003, 08:36
    #32272403
dishlo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
2 tpg

в вашем запросе теряется связь.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
table1
c1,c2
 1 ,   1 
 1 ,   2 
 1 ,   3 

table2
c1,c2
 1 ,   1  


этот запрос
Код: plaintext
select t2.column1 from table2 t2 where t1.column1 = t2.column1 and t1.column2 = t2.column2


выведет
Код: plaintext
 1 


а этот
Код: plaintext
1.
2.
delete t1.*
from table1 t1 
where t1.column1 in 

покоцает все записи в table1 где
Код: plaintext
с1 =  1 


а нужно что бы удалилась толко первая строка
Код: plaintext
с1=  1  and c2 =  1 
...
Рейтинг: 0 / 0
23.09.2003, 08:40
    #32272409
tpg
tpg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
Тогда может быть вообще потупому попробовать?

Код: plaintext
1.
2.
3.
delete t1.*
from table1 t1 
where t1.column1 in (select t2.column1 from table2 t2)
and t1.column2 in (select t2.column2 from table2 t2)
...
Рейтинг: 0 / 0
23.09.2003, 08:48
    #32272420
dishlo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
2 tpg

добавим
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
table1
c1,c2
 1 ,   1 
 1 ,   2 
 1 ,   3 
 2 ,   1 

table2
c1,c2
 1 ,   1  
 2 ,   2  


этот запрос
Код: plaintext
select t2.column1 from table2 t2


выведет
Код: plaintext
 1 ,  2 


и этот
Код: plaintext
select t2.column2 from table2 t2


выведет
Код: plaintext
 1 ,  2 

а этот
Код: plaintext
1.
delete t1.*
from table1 t1 


покоцает все записи в table1 кроме третей строки где
Код: plaintext
c2 =  3 
...
Рейтинг: 0 / 0
23.09.2003, 09:58
    #32272506
dishlo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
с утра вопрос висит, а ответа все нету.
и ладно бы какой замысловатый, по специфическим вопросам, а то ведь по основе основ - запрос SQL.
Это не дело, товарищи, призываю к активности!
...
Рейтинг: 0 / 0
23.09.2003, 10:01
    #32272509
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
Купи себе книжку по SQL и научись писать запросы
...
Рейтинг: 0 / 0
23.09.2003, 10:03
    #32272512
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
Это не дело, товарищи, такие вопросы с утра забесплатно решать. Призываю всех идти спать!
...
Рейтинг: 0 / 0
23.09.2003, 10:04
    #32272516
OMP
OMP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
Попрубуй
delete t1.*
from table1 AS t1 inner join table2 AS t2 on t1.column1 = t2.column1
...
Рейтинг: 0 / 0
23.09.2003, 10:13
    #32272534
dishlo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
2 OMP
оператор as можно благополучно пропускать

2 Лох Позорный
>Купи себе книжку по SQL и научись писать запросы

Если ты такой умный то почему не можешь ответить на простой вопрос?
...
Рейтинг: 0 / 0
23.09.2003, 10:15
    #32272539
OMP
OMP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
Код: plaintext
1.
2.
3.
4.
DELETE t1.*, t1.Код, t1.table1 
FROM table1 AS t1
WHERE (((t1.column1 ) In (SELECT t2.column1 
FROM table2 as t2)) AND ((t1.column2 ) In (SELECT t2.column2 
FROM table2 as t2)))
...
Рейтинг: 0 / 0
23.09.2003, 10:18
    #32272545
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
Если ты такой умный то почему не можешь ответить на простой вопрос?
Если ты такой любознательный - почему не купишь себе книжку?
...
Рейтинг: 0 / 0
23.09.2003, 10:20
    #32272549
dishlo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
2 OMP
такой запрос уже приводил tpg в третьем постинге
и в четвертом постинге я объяснил почему он не подходит
...
Рейтинг: 0 / 0
23.09.2003, 10:23
    #32272554
tpg
tpg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
Нет не совсем такой...
(Н-да, тяжело купаться в серной кислоте без первичного ключа)
...
Рейтинг: 0 / 0
23.09.2003, 10:42
    #32272581
OMP
OMP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
Может это поможет?
Код: plaintext
1.
2.
DELETE t1.*, [С1] & [С2] 
FROM t1
WHERE ([С1] & [С2]) In (SELECT с1 & С2 FROM t2 )
...
Рейтинг: 0 / 0
23.09.2003, 10:57
    #32272597
dishlo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
2 OMP
отлично! То что надо :-)
гениальное, как всегда просто.
...
Рейтинг: 0 / 0
23.09.2003, 11:02
    #32272606
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
delete t1.*
from table1 t1
where
t1.column1 = (select t2.column1 from table2 t2 Where t2.column1 = t1.column1) And
t1.column2 = (select t2.column2 from table2 t2 Where t2.column2 = t1.column2)
...
Рейтинг: 0 / 0
23.09.2003, 11:02
    #32272607
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
Ну, чтоб тебе скучно не было,
1 & 11 == 11 & 1
...
Рейтинг: 0 / 0
23.09.2003, 11:03
    #32272610
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
Витал, это я не тебе конечно
...
Рейтинг: 0 / 0
23.09.2003, 11:05
    #32272613
dishlo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
Эй! Лох Позорный, смог бы ты решить эту проблему, так же красиво как ОМР?
Хотя, думаю, что нет, и книжка бы не помогла :-)
Всем спасибо за внимание, и хорошего кода вам в программы!
...
Рейтинг: 0 / 0
23.09.2003, 11:06
    #32272617
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
Мальчик, иди на хуй
Я книжек не читаю.
...
Рейтинг: 0 / 0
23.09.2003, 11:11
    #32272624
dishlo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
и тебе не скучать
Код: plaintext
cstr( 1 ) & '_' & cstr( 11 ) == cstr( 11 ) & '_' & cstr( 1 )


ах, какая ты грубая девочка :)
...
Рейтинг: 0 / 0
23.09.2003, 11:16
    #32272630
OMP
OMP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
2 Лох Позорный

Код: plaintext
1.
2.
DELETE t1.*
FROM t1
WHERE ( "С1"  & [С1] &  "С2"  & [С2]) In (SELECT  "С1"  & С1 &  "С2"  & С2 FROM t2 )
...
Рейтинг: 0 / 0
23.09.2003, 11:18
    #32272639
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
это пишется (в аксес) с EXISTS. Долго, поскольку выполняет вложенный для каждой строки внешнего (передача величин строки из внешнего во внутренний). Но, как показывает практика, IN(Select ...) в Access выполняется абсолютно так-же (через Ж).

DELETE * FROM t
WHERE EXISTS(SELECT * FROM q WHERE t.k1=q.k1 AND t.k2=q.k2);

как-то так. Проверять не хочу. Но смысел в этом.

Для больших объемов имеет смысл (попробовать) открыть табличный рекордсет t1 и рекордсет inner join-a и поорудовать seek-ом (надеюсь, поля индексированные) и .delete-ом Может оказаться быстрее.
...
Рейтинг: 0 / 0
23.09.2003, 11:19
    #32272641
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связанный запрос на удаление
маладцы дети (мальчики, девочки, хрен вас разберешь)
читали бы книжки - написали бы как Витал
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / связанный запрос на удаление / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]