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

Откуда: Донецк
Сообщений: 134
Подскажите, пожалуйста, как из одной таблицы вычесть другую, т.е. чтобы данных из одной таблицы не было в другой?
2 мар 05, 15:12    [1356601]     Ответить | Цитировать Сообщить модератору
 Re: вычитание таблиц!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
DECLARE @Table1 TABLE(col1 int NOT NULL)
DECLARE @Table2 TABLE(col1 int NOT NULL)

INSERT INTO @Table1 VALUES(1)
INSERT INTO @Table1 VALUES(2)
INSERT INTO @Table1 VALUES(3)
INSERT INTO @Table2 VALUES(1)
INSERT INTO @Table2 VALUES(2)



DELETE T1
  FROM @Table1 T1
WHERE
  EXISTS(SELECT * FROM @Table2 WHERE col1 = T1.col1)

SELECT * FROM @Table1
2 мар 05, 15:18    [1356644]     Ответить | Цитировать Сообщить модератору
 Re: вычитание таблиц!  [new]
Alexander Popov
Member

Откуда:
Сообщений: 663
ну можно так
Select * from t1
left outer join t2 on t1.f1=t2.f2
where t2.f2 is null
Таким образом можно определить те данные которые есть в t1 но которых нет в t2
2 мар 05, 15:19    [1356651]     Ответить | Цитировать Сообщить модератору
 Re: вычитание таблиц!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
А minus в MSSQL есть ?
2 мар 05, 15:30    [1356721]     Ответить | Цитировать Сообщить модератору
 Re: вычитание таблиц!  [new]
Vanek
Member

Откуда: Kyiv
Сообщений: 49
Работа с множествами в Transact-SQL. www.aspnetmania.com/Articles/Article.aspx?ID=41
Может пригодится
2 мар 05, 15:34    [1356748]     Ответить | Цитировать Сообщить модератору
 Re: вычитание таблиц!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Gluk (Kazan)
А minus в MSSQL есть ?


Нет. Есть NOT EXISTS в подзапросе.
2 мар 05, 15:35    [1356759]     Ответить | Цитировать Сообщить модератору
 Re: вычитание таблиц!  [new]
Alexander Us
Member

Откуда:
Сообщений: 1133
Если с Вам придётся много упражняться с этой темой,
попробуйте Универсальный способ работы с множествами, из 3 части статьи, которую Вам порекомендовал Vanek.
Кстати, я был бы рад услышать мнение уважаемых Гуру о этом методе, и тех, кто уже использует этот метод.

-- @Table1 минус @Table2
select Col1 from
(
  select  distinct Col1, 1 TID from @Table1
  UNION ALL
  select  distinct Col1, 2 TID from @Table2
)T group by Col1 
having sum(TID) in (1)

-- @Table2   минус  @Table1
select Col1 from
(
  select  distinct Col1, 1 TID from @Table1
  UNION ALL
  select  distinct Col1, 2 TID from @Table2
)T group by Col1 
having sum(TID) in (2)

-- пересечение @Table1 и @Table2
select Col1 from
(
  select  distinct Col1, 1 TID from @Table1
  UNION ALL
  select  distinct Col1, 2 TID from @Table2
)T group by Col1 
having sum(TID) in (3)

-- Симметричная разность @Table1 и @Table2
select Col1 from
(
  select  distinct Col1, 1 TID from @Table1
  UNION ALL
  select  distinct Col1, 2 TID from @Table2
)T group by Col1 
having sum(TID) in (1,2)

-- Объединение @Table1 и @Table2 (аналогично @Table1 UNION @Table2 )
select Col1 from
(
  select  distinct Col1, 1 TID from @Table1
  UNION ALL
  select  distinct Col1, 2 TID from @Table2
)T group by Col1 
having sum(TID) in (1,2,3)
2 мар 05, 21:56    [1358029]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить