Форум: "Начинающим";
Текущий архив: 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.044 c