Member
Статус: Не в сети Регистрация: 10.01.2005 Откуда: Москва
Подскажите, пожалуйста, как будет выглядеть SQL запрос для следующей задачи:
Имеется таблица A и таблица B. Как выполнить операцию A=A-B? т.е как удалить
те записи из A, которые имеются в B. В обоих таблицах единственное поле Field.
Заранее благодарен.
Member
Статус: Не в сети Регистрация: 20.02.2004 Откуда: Barnaul
Или
delete from a
where exists
(select * from b
where b.xxx=a.xxx)
Будет работать быстрее, если много записей в A соответствует соответстует записям в B.
Кстати, что это за таблица из одного поля? Состоящая только из первичного ключа? Или вообще без него?
В первом случае непонятно, для чего она нужна, а во втором случае это нарушение правил проектирования БД.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Цитата:
а во втором случае это нарушение правил проектирования БД
Ну не все получается делать по правилам, иногда приходится и через голову делать Хотя тут конечно как ни крути не совсем понятно, зачем одно поле? Почему нет ключа?
Member
Статус: Не в сети Регистрация: 20.02.2004 Откуда: Barnaul
Ray Adams
Цитата:
Ну не все получается делать по правилам
:shock: Они для того и придуманы (на основе теории множеств) умными людьми, чтобы другие велосипед не изобретали. Иначе проще в Excel'е данные хранить
Добавлено спустя 19 минут, 37 секунд: Опять же, при проектировании баз данных (если они не для домашнего использования) используют CASE-средства (как правило ERwin), которые не только позволяют оперировать сущностями реального мира и использовать привычную для проблеммных консультантов терминологию, но и избежать многих ошибок. Да и кодогенерация созданной модели значительно упрощает жизнь.
Ray Adams Похоже, меня как Остапа понесло
Junior
Статус: Не в сети Регистрация: 31.05.2004 Откуда: Ереван
Вот ещё
delete from a, a inner join b on a.xxx = b.xxx as a1
where a.xxx = a1.xxx
Насколько знаю, в MSSQL сервере подзопросы оптимизируються на join - и.
И это будет бытрее выполняться.
Согласен с вами, это нарушение правил проектирования БД,
_________________ Когда другие уже закончили, процессоры Intel Pentium продолжают работать, работать и работать ...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения