Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
noreset
Member

Откуда:
Сообщений: 68
Здравствуйте. Есть 2 таблицы. Нужно Из первой таблицы удалить те строчки, которые есть во второй таблице. Подскажите как это сделать?
19 окт 11, 10:27    [11464183]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
delete t1
from table1 t1
join table2 t2 on <критерий одинаковости строк>
19 окт 11, 10:31    [11464212]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
noreset
Member

Откуда:
Сообщений: 68
tpg,
вот так?

delete
from studenty
join prepody on studenty.FAM = prepody.FAM and studenty.IMA = prepody.IMA and studenty.OTCH = prepody.OTCH
and studenty.DATA_ROJD = prepody.DATA_ROJD

Если да, то пишет Incorrect syntax near the keyword 'join'.

Я вообще много что пробовал, он постоянно жалуется, если стоит что то после from
19 окт 11, 10:52    [11464361]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
iljy
Member

Откуда:
Сообщений: 8711
noreset,

сравните свой запрос и запрос tpg
19 окт 11, 10:55    [11464383]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
noreset
Member

Откуда:
Сообщений: 68
DELETE 
FROM t1, t2 
USING t1 INNER JOIN t2 INNER JOIN t3 
WHERE t1.id=t2.id AND t2.id=t3.id;

Я и вот такую конструкцию пробовал, тоже ругается на то, что после FROM стоит. Что я не так делаю?
19 окт 11, 10:56    [11464397]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
iljy
Member

Откуда:
Сообщений: 8711
noreset,

вы выдумываете синтаксис, а это плохая идея. Если вам мало одного примера - откройте документацию, там есть еще.
19 окт 11, 10:58    [11464422]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
noreset
Member

Откуда:
Сообщений: 68
хорошо, идею бросил. Тогда объясните по первому примеру пожалуйста. Что означают t1 t2, это как я понял столбцы из первой таб и из второй?
19 окт 11, 11:02    [11464459]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
noreset,

Это таблицы.
19 окт 11, 11:03    [11464465]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
trew,

(алиасы таблиц)
19 окт 11, 11:03    [11464468]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
Glory
Member

Откуда:
Сообщений: 104751
noreset
Тогда объясните по первому примеру пожалуйста. Что означают t1 t2, это как я понял столбцы из первой таб и из второй?

Это псевдонимы/alias-ы
19 окт 11, 11:04    [11464469]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
noreset
Member

Откуда:
Сообщений: 68
trew,

как это таблицы? delete [имя таблицы] ?
А table1 и table2 тогда что?
19 окт 11, 11:05    [11464476]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
noreset
DELETE 
FROM t1, t2 
USING t1 INNER JOIN t2 INNER JOIN t3 
WHERE t1.id=t2.id AND t2.id=t3.id;

Я и вот такую конструкцию пробовал, тоже ругается на то, что после FROM стоит. Что я не так делаю?
Какая ещё USING?
Какой у Вас сервер? Точно MSSQL?
Внимательно прочитать пост tpg - это же так просто!

В DELETE микрософтовского сервера может быть два FROM. Но это совсем разные FROM!
Один (первый? сразу после слова DELETE) - необязателен и просто соответствует стандарту ANSI.
А второй нужен для удаления на основе JOINа с другими таблицами.
Это Вам и нужно.

http://msdn.microsoft.com/ru-ru/library/ms189835(v=SQL.100).aspx
19 окт 11, 11:05    [11464482]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
noreset
Member

Откуда:
Сообщений: 68
только сильно не кричите, но я все же спрошу). Что за алиасы? где эти псевдонимы еще смотреть?
19 окт 11, 11:09    [11464517]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
noreset
только сильно не кричите, но я все же спрошу). Что за алиасы? где эти псевдонимы еще смотреть?
Читайте очень внимательно:
http://msdn.microsoft.com/ru-ru/library/ms177634(v=SQL.100).aspx
19 окт 11, 11:17    [11464589]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
noreset,

только сильно не кричите, но я все же спрошу). Что за алиасы? где эти псевдонимы еще смотреть?

алиас - это псевдоним таблицы, используется для того чтобы не писать длинные наименования таблиц.


delete s1
from studenty s1
join prepody p1 on s1.FAM = p1.FAM and s1.IMA = p1.IMA and s1.OTCH = p1.OTCH
and s1.DATA_ROJD = p1.DATA_ROJD

Это тоже самое, что и
delete studenty 
from studenty 
join prepody on studenty.FAM = prepody.FAM and studenty.IMA = prepody.IMA 
and studenty.OTCH = prepody.OTCH
and studenty.DATA_ROJD = prepody.DATA_ROJD
19 окт 11, 11:22    [11464626]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
noreset
Member

Откуда:
Сообщений: 68
trew,

Да, я так и написал, только перед псевдонимами AS ставил. Все пошло. Спасибо всем! И отдельное спасибо jar за статью, как раз искал все что обозначает)
19 окт 11, 11:35    [11464740]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
Ну если совсем тупишь, то напиши так:
delete from t1
where 
  exists (
    select 1 from t2
    where <критерий одинаковости строк>
)
19 окт 11, 15:45    [11467189]     Ответить | Цитировать Сообщить модератору
 Re: Удаление тех строк таблицы №1, которые есть в таблице №2  [new]
UV
Member

Откуда: EU
Сообщений: 36
Или так:

DELETE FROM t1 WHERE id IN (SELECT id FROM t2 WHERE xxx)
19 окт 11, 16:16    [11467436]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить