Как выбрать строки из таблицы, которые не связаны с другой таблицей в SQL Server? - PullRequest
1 голос
/ 13 января 2011

У меня есть две таблицы, связанные 2 полями. Некоторые строки из первой таблицы связаны со второй таблицей, некоторые - нет. Как выбрать те, которые не связаны со второй таблицей? Я смоделировал ситуацию.

create table MainTbl(qno int, idno int, cat int);
create table SubTbl(newno int, idno1 int);

insert into maintbl values(1001, 88, 1);
insert into maintbl values(1002,88,1);

insert into subtbl values(11001, 88);
insert into subtbl values(11002,99);
insert into subtbl values(11003,88);

select * from maintbl,subtbl where (((cat*10000)+qno)=newno) and (idno=idno1);

select * from maintbl
left join subtbl on
(((cat*10000)+qno)<>newno) and (idno=idno1)

drop table maintbl;
drop table subtbl;

Первый оператор select должен выбрать все связанные строки, которые мне уже удалось.

Второе утверждение состоит в том, чтобы выбрать все строки, которые не связаны .. которые я все еще пытаюсь выяснить.

newno из subtbl связано с (cat*10000)+qno из maintbl

idno1 из subtbl связан с idno из maintbl

Ответы [ 2 ]

1 голос
/ 13 января 2011

Вам нужно выполнить правильное ANSI JOIN (а не JOIN в стиле table,table,table.... - это устарело - прекратите его использовать!), А затем вам нужно сделать LEFT OUTER JOIN, чтобы объединить те строки, которые существуют только в mainTbl, и в этих случаях значения от subTbl равны NULL:

SELECT * 
FROM dbo.maintbl m
LEFT OUTER JOIN dbo.subtbl s ON (m.cat * 10000 + m.qno) = s.newno AND (m.idno = s.idno1)
WHERE s.newno IS NULL

Здесь перечислены все те строки, которые существуют в mainTbl, но отсутствуют в subTbl:

qno    idno  cat   newno   idno1
1002   88     1     NULL    NULL
1 голос
/ 13 января 2011

Вы близки - вы делаете левое соединение, но затем делаете WHERE, чтобы найти строки maintbl, которые не имеют подходящих строк subtbl

select * from maintbl 
left join subtbl on (((cat*10000)+qno)=newno) and (idno=idno1) 
where newno IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...