Форум программистов, компьютерный форум, киберфорум
Firebird/InterBase
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/27: Рейтинг темы: голосов - 27, средняя оценка - 4.70
2 / 2 / 1
Регистрация: 05.12.2008
Сообщений: 9
1

Удаление через связывание таблиц

14.09.2009, 12:32. Показов 5109. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Есть таблица на которую ссылаются множество других таблиц. Необходимо удалить записи из дочерних таблиц.
Вот главная таблица:
SQL Скопировано
1
2
3
4
5
6
CREATE TABLE EDGE (
    EDGEID     INTEGER NOT NULL,
    RAILWAYID  INTEGER NOT NULL
    ....
);
ALTER TABLE EDGE ADD PRIMARY KEY (EDGEID);
И вот пример дочерней:
SQL Скопировано
1
2
3
4
CREATE TABLE NBUILD (
    EDGEID  INTEGER NOT NULL,
    ....
);
Собственно проблема в том, что сейчас я удаляю ненужные записи из дочерних таблиц отдельными запросами типа:

SQL Скопировано
1
2
DELETE FROM nbuild WHERE EdgeID IN 
(SELECT EdgeID FROM edge WHERE RailwayID = :WAY_ID);
Дочерних таблиц около 20, и такое удаление работает очень медленно. Я хочу написать один запрос на удаление, объединяющий все таблицы, но не знаю как это сделать в Firebird. (Firebird 2.5.0)
Вот такой запрос я писал для MySQL:
SQL Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
DELETE
  FROM 
  nbuild, 
  ncategory
  ......
  USING edge e
  INNER JOIN nbuild
  INNER JOIN ncategory
  .....
  WHERE 
   nbuild.edgeid = e.edgeid AND 
   ncategory.edgeid = e.edgeid
   .....
Сколько не пытался соединить таблицы с помощью join в FB, ничего не выходит.
Заранее всем благодарен за помощь!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.09.2009, 12:32
Ответы с готовыми решениями:

связывание таблиц
Возможно ли привязать к ключевому полю 1 таблицы несколько таблиц, через внешний ключ (например к полю id_personal(pk) главной таблицы...

Связывание таблиц
Возможно ли привязать к ключевому полю 1 таблицы несколько таблиц, через внешний ключ (например к полю id_personal(pk) 3 таблицы, у которых...

Связывание таблиц
День добрый, столкнулся со странным, с моей точки зрения, поведением таблицы в базе firebird 2.1, при удалении записи происходит так же...

4
 Аватар для BasicMan
19317 / 2624 / 84
Регистрация: 17.02.2009
Сообщений: 30,364
14.09.2009, 12:49 2
я конечно не знаток файрабёрда, но вот что я
нагуглил
Явные join Синтаксис явных объединений появился в SQL92 (поэтому в той книге М. Грабера, которая находится в интернете, нет упоминания о join - она вышла до 1992 года. Зато полное описание явных join есть в более новом издании этой же книги). InterBase поддерживает явные join в стандартном синтаксисе с версии 4.0. Вот поддерживаемый синтаксис join из langref.pdf = tableref join_type JOIN tableref ON search_condition | (joined_table) = [INNER] JOIN | {LEFT | RIGHT | FULL } [OUTER]} Это означает, что INNER JOIN = JOIN, а LEFT/RIGHT OUTER JOIN = LEFT/RIGHT JOIN, то есть слова INNER и OUTER являются необязательными. При этом, в отличие от неявного join, условие объединения таблиц (on) и условия "фильтрации" where разделены.

кстати, если б я сразу твой код посмотрел, то заметил бы, что отсутствует ключевое слово ON после таблицы, после куоторого необходимо перечислить поля по которым джойнишь )))

Не по теме:

а так полез в дебри гугла, начал разбирать интербейз, а окся все оч просто.

классический синтаксис еще никто не отменял
0
2 / 2 / 1
Регистрация: 05.12.2008
Сообщений: 9
14.09.2009, 13:07  [ТС] 3
Цитата Сообщение от CyberБурундукЪ Посмотреть сообщение
я конечно не знаток файрабёрда, но вот что я нагуглил
Проблема то в том, что я как раз могу написать сам запрос.
Вот пример того, что писал
SQL Скопировано
1
2
3
4
5
6
7
SELECT COUNT(*) FROM
 edge e
   JOIN nbuild b
   JOIN ncategory c
WHERE e.edgeid = b.edgeid AND
      c.edgeid = b.edgeid AND
      e.railwayid = 164;
P.S. Ну я сначала хотел написать просто select, а потом уже delete

Цитата Сообщение от CyberБурундукЪ Посмотреть сообщение
кстати, если б я сразу твой код посмотрел, то заметил бы, что отсутствует ключевое слово ON после таблицы
Согласен. )) Но этот код для mysql, а там при использовании using table_name не надо писать on после inner join.
0
 Аватар для BasicMan
19317 / 2624 / 84
Регистрация: 17.02.2009
Сообщений: 30,364
14.09.2009, 13:14 4
Цитата Сообщение от Moon Wolf Посмотреть сообщение
Но этот код для mysql, а там при использовании using table_name не надо писать on после inner join.

то ли я идиот, то ли объясняю плохо. одного из 2х, но
вот кусог нагуглил про джойны в мускле:
Что такое JOINы в MySQL

В MySQL термин JOIN используется гораздо шире, чем можно было бы предположить. Здесь JOINом может называться не только запрос объединяющий результаты из нескольких таблиц, но и запрос к одной таблице, например, SELECT по одной таблице — это тоже джоин.

Все потому, что алгоритм выполнения джоинов в MySQL реализован с использованием вложенных циклов. Т.е. каждый последующий JOIN это дополнительный вложенный цикл. Чтобы выполнить запрос и вернуть все записи удовлетворяющие условию MySQL выполняет цикл и пробегает по записям первой таблицы параллельно проверяя соответствия условиям описанных в теле запроса, когда находятся записи, удовлетворяющие условиям — во вложенном цикле по второй таблице ищутся записи соответствующие первым и удовлетворяющие условиям проверки и т.д.

Прмер обычного запроса с INNER JOIN

SQL Скопировано
1
2
3
4
5
6
7
8
9
10
    SELECT
      *
    FROM
      Table1
    INNER JOIN
      Table2 ON P1(Table1,Table2)
    INNER JOIN
      Table3 ON P2(Table2,Table3)
    WHERE
       P(Table1,Table2,Table3)
.

повторюсь еще раз, не побоюсь:
Цитата Сообщение от CyberБурундукЪ Посмотреть сообщение
классический синтаксис еще никто не отменял
Добавлено через 53 секунды
так вот там тоже ОН как это ни странно )))
0
2 / 2 / 1
Регистрация: 05.12.2008
Сообщений: 9
15.09.2009, 14:08  [ТС] 5
Решил отказаться от связывания через join, т.к. нашел способ, с помощью которого можно быстро удалить необходимые мне записи.

SQL Скопировано
1
2
FOR SELECT EdgeID FROM edge WHERE RailwayID=:WAY_ID INTO :EDGE_ID DO
   DELETE FROM nbuild WHERE EdgeID=:E_ID;
Спасибо CyberБурундукЪ за помощь. ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.09.2009, 14:08
Помогаю со студенческими работами здесь

Связывание двух таблиц
Всем добрый день, подскажите мне как правильно сделать выборку из двух таблиц, то что я написал, ругается на "множество выбранных...

Связывание таблиц через функцию ВПР
Помогите разобраться с самостоялкой! файл вовложении. я пробовал это сделать через функцию впр, но как-то не получается... ((( ...

Связывание двух таблиц через ADOQuery
У меня база данных, с двумя таблицами. Хочу связать их через ADOquery, как в ADOtable через диаграмму(Master Field). Если конкретно, то...

Связывание двух таблиц через одно поле
вот у меня такая программа. . При выборе курса показывает группы из того курса. Я связал две таблицы через столбик "Курсы" ...

Создание и удаление таблиц через VBA
Помогите мне, т. к. я первый раз пользуюсь VBA и не все тонкости понимаю программы.... буду благодарен за пояснение, подсказки, с чего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Конвейеры данных с Apache Kafka
Javaican 16.03.2025
В мире, где данные стали новой нефтью, Apache Kafka зарекомендовал себя как мощный инструмент для построения надежных и масштабируемых конвейеров данных. Созданный изначально командой LinkedIn в 2011. . .
Deno против Node.js: Будущее JavaScript рантайма
run.dev 16.03.2025
За последнее десятилетие Node. js стал абсолютным лидером среди JavaScript-рантаймов и фактическим стандартом для серверной разработки на JavaScript. Но в 2018 году тот же разработчик, который создал. . .
SwiftUI или UIKit - что выбрать для нового приложения iOS?
mobDevWorks 16.03.2025
Когда Apple представила SwiftUI на WWDC 2019, многим показалось, что дни UIKit сочтены. Новый декларативный фреймворк предлагал радикально иной подход к разработке интерфейсов. Вместо кропотливого. . .
Docker: Руководство для начинающих по созданию первого приложения
Mr. Docker 16.03.2025
Docker — это платформа, которая упаковывает ваше приложение и все его зависимости в стандартизированные блоки, называемые контейнерами. Эти контейнеры изолированы друг от друга и от основной системы,. . .
парные условия и обработка кодов возврата (errorlevels)
jigi33 16.03.2025
Расширенная версия скобок условий, внутри неё могут быть использованы || (логическое или), & (логическое и) и логика генерации и обработки ошибок в BASH скриптах #!/ bin/ bash # Расширенная. . .
идеальная отладка в BASH скриптах
jigi33 16.03.2025
#!/ bin/ bash # VARIANT 1 - using keys -v or -xv # set -v - set verify mode OR # set -xv - set xtrace + verify mode (maximum detalization) OR # VARIANT 2 - ADD AVESOME BLOCK FOR DEBUGGING or. . .
Protobuf в Go и новый Opaque API
golander 15.03.2025
Распределенные системы опираются на эффективные протоколы обмена данными — о чем вы, скорее всего, прекрасно знаете, если работаете с микросервисной архитектурой. Protocol Buffers (Protobuf) от. . .
Преобразование строк в C++: std::from_chars от C++17 до C++26
NullReferenced 15.03.2025
Конвертация строк в числа — задача, с которой сталкивается практически каждый C++ разработчик. Несмотря на кажущуюся простоту, эта операция таит множество подводных камней и неочевидных последствий. . .
Управление памятью в Java и новые сборщики мусора
Javaican 15.03.2025
Эффективное управление памятью всегда было ахиллесовой пятой высоконагруженных Java-приложений. При разработке на Java мы обычно полагаемся на автоматическое управление памятью через сборщики мусора. . .
Angular или Svelte - что выбрать?
Reangularity 15.03.2025
Во фронтенд-разработке Angular и Svelte представляют собой два совершенно разных подхода к решению схожих задач. Один — полноценный, мощный монолит с корпоративной поддержкой, другой — компактный,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер