Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Вниз

Запросы   Найти похожие ветки 

 
Клара   (2007-02-06 10:58) [0]

Доброго дня Вам, господа знатоки!
У нас возникла проблема в удалении записей из двух таблиц.
Имеется:
DELETE Reklama.*, zakasi.*, IIf([data_konca_pokaza]+7>=Date(),1,0) AS Выражение1
FROM Reklama INNER JOIN zakasi ON Reklama.kod_objavl = zakasi.kod_objavl
WHERE (((IIf([data_konca_pokaza]+7>=Date(),1,0))=0));
в таком варианте он не работает, что не так подскажите?


 
stone ©   (2007-02-06 11:01) [1]


> что не так подскажите?

синтаксис запроса на выборку данных <> синтаксис запроса на удаление данных


 
ЮЮ ©   (2007-02-06 11:01) [2]


> DELETE Reklama.*, zakasi.*, IIf([data_konca_pokaza]+7>=Date(),1,0) AS Выражение1

Если подчеркнутое означает удаление их таблиц Reklama и zakasi, то откуда предполагает удаление выделенного?


 
Клара   (2007-02-06 11:05) [3]


> stone

Выборка как раз происходит, а вот следующий шаг не работает или работает удаление из одной таблицы zakasi.*.


 
Клара   (2007-02-06 11:08) [4]


> ЮЮ


> IIf([data_konca_pokaza]+7>=Date(),1,0) AS Выражение1

Вот это выборка с условием, если договор не продляется 7 дней, то мы удаляем эти записи из двух таблиц.


 
stone ©   (2007-02-06 11:11) [5]


> Клара   (06.02.07 11:05) [3]
> Выборка как раз происходит, а вот следующий шаг не работает
> или работает удаление из одной таблицы zakasi.*.

Я вижу только один шаг - удаление.

ЗЫ. Неплохо бы уточнить СУБД, а то меня терзают смутные сомнения...


 
Клара   (2007-02-06 11:13) [6]


> stone

Access, а проги в D7


 
ЮЮ ©   (2007-02-06 11:14) [7]

все условия должны быть в WHERE. Тем более оно уже там есть


 
Клара   (2007-02-06 11:16) [8]


> ЮЮ

Это условие с вычисляемым полем.


 
Desdechado ©   (2007-02-06 11:17) [9]

> Вот это выборка с условием
Все условия заключаются в WHERE.
Учите матчасть, мадам.


 
sniknik ©   (2007-02-06 11:19) [10]

+ удаление из двух и более таблиц в одной команде в access(jet) невозможно.


 
Клара   (2007-02-06 11:20) [11]

DELETE zakasi.*, IIf([data_konca_pokaza]+7>=Date(),1,0) AS Выражение1
FROM Reklama INNER JOIN zakasi ON Reklama.kod_objavl = zakasi.kod_objavl
WHERE (((IIf([data_konca_pokaza]+7>=Date(),1,0))=0));
Если вот так, то удаление происходит, но только из одной таблицы, а как удалить из связаных. Причем Reklama является родительской.


 
Клара   (2007-02-06 11:22) [12]


> Учите матчасть, мадам.


> Desdechado

А там как бы его нет!!!


 
Клара   (2007-02-06 11:23) [13]


> sniknik

А что можно сделать?


 
ЮЮ ©   (2007-02-06 11:24) [14]

DELETE Reklama.*, zakasi.*
FROM ...


 
Sergey13 ©   (2007-02-06 11:25) [15]

> [11] Клара   (06.02.07 11:20)
> а как удалить из связаных. Причем Reklama является родительской.

А каскадного удаления в аксесе нет?


 
Клара   (2007-02-06 11:26) [16]


> ЮЮ

Можно мысль продлить.


 
Клара   (2007-02-06 11:29) [17]


> Sergey13

Есть, но каскад удаляет сначала в родительских, а затем в дочерних.
А у нас нет проблем в удалении из дочерней zakasi.*.


 
ЮЮ ©   (2007-02-06 11:31) [18]

Дальше - все ваше.
Если запрос
SELECT Reklama.*, zakasi.*, IIf([data_konca_pokaza]+7>=Date(),1,0) AS Выражение1
FROM Reklama INNER JOIN zakasi ON Reklama.kod_objavl = zakasi.kod_objavl
WHERE (((IIf([data_konca_pokaza]+7>=Date(),1,0))=0));

возвращает именно те записи, что нужно удалить, то

DELETE Reklama.*, zakasi.*
FROM Reklama INNER JOIN zakasi ON Reklama.kod_objavl = zakasi.kod_objavl
WHERE (((IIf([data_konca_pokaza]+7>=Date(),1,0))=0));


 
Sergey13 ©   (2007-02-06 11:33) [19]

> [17] Клара   (06.02.07 11:29)
> Есть, но каскад удаляет сначала в родительских, а затем
> в дочерних.
Да ты что?!!! А мужики то не знают.


 
Клара   (2007-02-06 11:36) [20]


> ЮЮ

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


 
Клара   (2007-02-06 11:37) [21]


> Sergey13

Ваш вариант какой?


 
Sergey13 ©   (2007-02-06 11:44) [22]

> [21] Клара   (06.02.07 11:37)

Обратный разумеется. Но это не так важно. Главное удаляются связанные записи в обеих таблицах. Ты же этого хотела?


 
Клара   (2007-02-06 11:45) [23]


> Да ты что?!!! А мужики то не знают.

Я знаю, что вы умные! Вот поэтому я к Вам и обращаюсь.


 
Desdechado ©   (2007-02-06 11:47) [24]

> А там как бы его нет!!!
Чего нет и где, выражайтесь яснее.
И еще раз - учите матчасть. Такую пургу нести, это же сколько подсолнухов выкурить надо было.


 
Клара   (2007-02-06 11:48) [25]


> Обратный разумеется.

Но тогда не учитывается целостность. Я думала над этим.


 
Sergey13 ©   (2007-02-06 11:52) [26]

> [25] Клара   (06.02.07 11:48)
> Но тогда не учитывается целостность. Я думала над этим.
Ты прикалываешься?


 
Клара   (2007-02-06 11:55) [27]


> Desdechado

Я не курю!!!


 
Клара   (2007-02-06 11:58) [28]


> Sergey13

Я может, что-то не знаю? Речь идет о способах объединения (левое, правое, полное). Если нет то как это сделать.


 
ЮЮ ©   (2007-02-06 11:59) [29]

Если data_konca_pokaza в Reklama, то

1)  [11]

2)
DELETE *
FROM Reklama
WHERE
WHERE (((IIf([data_konca_pokaza]+7>=Date(),1,0))=0));


 
Sergey13 ©   (2007-02-06 11:59) [30]

> [28] Клара   (06.02.07 11:58)

Я говорю про каскадное удаление по внешнему ключу.


 
Клара   (2007-02-06 12:04) [31]


> Sergey13

Это в запросе как то отражается или только в схеме данных?
Я пробовала все варианты.


 
Sergey13 ©   (2007-02-06 12:07) [32]

> [31] Клара   (06.02.07 12:04)

Только в схеме.


 
Клара   (2007-02-06 12:08) [33]


> ЮЮ



> data_konca_pokaza

Берется из таблицы  zakasi.


 
Клара   (2007-02-06 12:10) [34]


> Sergey13

Все флажки выставлены, при выполнении записи удаляются только из zakasi.


 
ЮЮ ©   (2007-02-06 12:18) [35]


> Все флажки выставлены, при выполнении записи удаляются только
> из zakasi.


Запросом из [11]?
А если
DELETE Reclama.*
FROM ...

а из zakasi должно удалиться каскадом.

А записи в Reklama без единой записи в  zakasi  возможны и нужны?


 
Клара   (2007-02-06 12:39) [36]


> ЮЮ


DELETE Reclama.*
FROM ...
Ну и дальше, что.
Все, что было предложено я проделываю и работает только вариант [11].
Но в этом случае удаляются записи только из одной zakasi.
А как обратную связь включить в каскаде?


 
Sergey13 ©   (2007-02-06 13:00) [37]

> А как обратную связь включить в каскаде?

Зачем? Удаляя из родителя удалятся и в дочерней. Вот и удаляй запросом из родительской таблицы.


 
ЮЮ ©   (2007-02-06 13:00) [38]

Похоже запись из мастер-таблицы должна присутствовать в запросе 1 раз, даже при включенном каскадном удалении.

Тогда запрос следует переписать так:

DELETE *
FROM
 Reclama where Reklama.kod_objavl in
  (SELECTkod_objavl FROM zakasi WHERE (IIf([data_konca_pokaza]+7>=Date(),1,0))=0)


 
sniknik ©   (2007-02-06 13:34) [39]

> Похоже запись из мастер-таблицы должна присутствовать в запросе 1 раз, даже при включенном каскадном удалении.
с чего взял? все можно указывать, и сколько угодно раз, указание же из какой таблицы удалять (если в этом дело) указывается алиасом после DELETE xxx.* ... перед * (а если запрос однозначен, то ее вообще можно не писать. т.е. у тебя в примере [38] пройдет DELETE FROM ....)
это есть в справке access(Jet).


 
ЮЮ ©   (2007-02-06 13:38) [40]


> с чего взял?

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

DELETE main.*
FROM main INNER JOIN detail ON main.id=detail.mainId
WHERE detail.name="21";

и нормальное удаление при

DELETE *
FROM main
WHERE Id in( SELECT MainId FROM  detail WHERE name="21");



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.049 c
15-1170524258
Parus
2007-02-03 20:37
2007.02.25
Пиринговые сети


15-1170186746
hmmm
2007-01-30 22:52
2007.02.25
PHP +HTML :) не пинайте


2-1170676945
Alex_ey
2007-02-05 15:02
2007.02.25
treeview


15-1170341727
malyar
2007-02-01 17:55
2007.02.25
редактор для PHP


3-1164981214
DelphiLexx
2006-12-01 16:53
2007.02.25
Аналог UpdateRecord но без CashedUpdates





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский