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

RID NewID OrderID
1 1 1
4 5 6
4 1 3
2 9 0


И таблица B:

RID NewID OrderID
4 5 6
4 1 3


Нужно определить "входит" ли таблица В в таблицу А

Как?

Спасибо.
9 янв 06, 18:21    [2237453]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Топ 10 вопрос 9
9 янв 06, 18:22    [2237456]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
Question22
Guest
непонял
9 янв 06, 18:58    [2237540]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
Еретик
Member

Откуда:
Сообщений: 358
Гавриленко Сергей Алексеевич
Топ 10 вопрос 9


А где это? Ссылку можно?

Из теории множеств в голову вот такое приходит:

SELECT 

(SELECT COUNT(*) FROM  (SELECT * FROM A UNION SELECT * FROM B))
 =
(SELECT COUNT(*) FROM  (SELECT * FROM A));


То есть если в объединении A и B столько же элеменов, сколько в A, то A включает B.

Правда не уверен, правильный ли это SQL и T-SQL, но попробовать можно.

Возможно, есть быть решение проще.
9 янв 06, 19:00    [2237551]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
Glory
Member

Откуда:
Сообщений: 104751
Question22
непонял

Наверху прикреплен топик с именем "ТОП10 самых популярных вопросов"
9 янв 06, 19:03    [2237557]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
Еретик
Member

Откуда:
Сообщений: 358
Еретик
SELECT 

(SELECT COUNT(*) FROM  (SELECT * FROM A UNION SELECT * FROM B))
 =
(SELECT COUNT(*) FROM  (SELECT * FROM A));




(SELECT COUNT(*) FROM (SELECT * FROM A)) - это я загнул.

SELECT 

(SELECT COUNT(*) FROM  (SELECT * FROM A UNION SELECT * FROM B))
 =
(SELECT COUNT(*) FROM  A)

9 янв 06, 19:03    [2237559]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
Glory
Member

Откуда:
Сообщений: 104751
Еретик
Из теории множеств в голову вот такое приходит:

SELECT 

(SELECT COUNT(*) FROM  (SELECT * FROM A UNION SELECT * FROM B))
 =
(SELECT COUNT(*) FROM  (SELECT * FROM A));


То есть если в объединении A и B столько же элеменов, сколько в A, то A включает B.

Правда не уверен, правильный ли это SQL и T-SQL, но попробовать можно.

Возможно, есть быть решение проще.

Т.е. если у меня 3 груши, а у вас 3 луковицы, то на ужин мы будем есть одно и тоже ?
9 янв 06, 19:07    [2237567]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
S.A.N.
Member

Откуда: Москва
Сообщений: 139
Топик https://www.sql.ru/forum/actualthread.aspx?tid=128516
Ссылается на http://www.aspnetmania.com/Articles/Article.aspx?ID=41
9 янв 06, 19:08    [2237569]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
Еретик
Member

Откуда:
Сообщений: 358
Glory

Т.е. если у меня 3 груши, а у вас 3 луковицы, то на ужин мы будем есть одно и тоже ?


Нет, UNION выдаст exeption.
9 янв 06, 19:12    [2237572]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
Glory
Member

Откуда:
Сообщений: 104751
Еретик
Glory

Т.е. если у меня 3 груши, а у вас 3 луковицы, то на ужин мы будем есть одно и тоже ?


Нет, UNION выдаст exeption.

Да, вы правы
9 янв 06, 19:15    [2237576]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
Еретик
Member

Откуда:
Сообщений: 358
Glory
Еретик
Glory

Т.е. если у меня 3 груши, а у вас 3 луковицы, то на ужин мы будем есть одно и тоже ?


Нет, UNION выдаст exeption.

Да, вы правы


:))
9 янв 06, 19:18    [2237581]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
S.A.N.
Member

Откуда: Москва
Сообщений: 139
Вот запрос, который покажет сколько записей таблицы В входят в таблицу А, а сколько нет.
Select VxogdY=(Case When IsNull(A.RID,0)>0 Then 1 Else 0 End)
       ,VxogdN=(Case When IsNull(A.RID,0)=0 Then 1 Else 0 End)
From B Left Outer Join A On B.RID=A.RID And B.NewID=A.NewID And B.OrderID=A.OrderID
9 янв 06, 19:22    [2237586]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
S.A.N.
Member

Откуда: Москва
Сообщений: 139
Sorry забыл суммирование
Select VxogdY=Sum(Case When IsNull(A.RID,0)>0 Then 1 Else 0 End)
       ,VxogdN=Sum(Case When IsNull(A.RID,0)=0 Then 1 Else 0 End)
From B Left Outer Join A On B.RID=A.RID And B.NewID=A.NewID And B.OrderID=A.OrderID
9 янв 06, 19:26    [2237592]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
Eugene Kogan
Member

Откуда: Microsoft, Redmond, WA, U.S.A.
Сообщений: 18
В SQL Server 2005 добавлены EXCEPT и INTERSECT:

create table t1(RID int, "NewID" int, OrderID int)
insert t1 values(1, 1, 1)
insert t1 values(4, 5, 6)
insert t1 values(4, 1, 3)
insert t1 values(2, 9, 0)
go
create table t2(RID int, "NewID" int, OrderID int)
insert t2 values(4, 5, 6)
insert t2 values(4, 1, 3)
go
select case count(*) when 0 then N'входит' else N'не входит' end
from
(
  select * from t2
  except
  select * from t1
) t
go

Женя
---
This posting is provided "AS IS" with no warranties, and confers no rights.
11 янв 06, 04:30    [2241835]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Вхождение одной таблицы в другую  [new]
Ruban Igor
Member

Откуда: Киев
Сообщений: 235
Eugene Kogan,
А если обобщить таким образом:

Есть таблица Т:
DocID GoodID
1 1
4 5
4 1
2 9

найти В ней DocID которые содержат те же товары (GoodID) , что и документ с DocID = 1.

Ответ типа:
DocID
1 -- сам себя содержит
4
12 июл 16, 00:27    [19397488]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
Ruban Igor,

читайте про реляционное деление
12 июл 16, 11:52    [19398922]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
Ruban Igor
Member

Откуда: Киев
Сообщений: 235
iap,

Буду благодарен, если дадите перу полезных ссылок на эту тему
12 июл 16, 12:05    [19399031]     Ответить | Цитировать Сообщить модератору
 Re: Вхождение одной таблицы в другую  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
Ruban Igor
iap,

Буду благодарен, если дадите перу полезных ссылок на эту тему

Как реализовать операцию реляционной алгебры "деление" на SQL?
https://www.sql.ru/forum/actualsearch.aspx?search=???????????&sin=0&bid=1&a=iap&ma=1&dt=-1&s=1&so=1
https://www.sql.ru/forum/actualsearch.aspx?search=???????????&sin=0&bid=1&a=&ma=0&dt=-1&s=1&so=1
http://lmgtfy.com/?q=реляционное деление
12 июл 16, 12:15    [19399104]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить