Как выбрать несоответствие записям от двух таблиц SQL?

Поскольку они - в основном объектно-ориентированные глобальные переменные, можно обычно разрабатывать классы таким способом так, чтобы Вам не были нужны они.

5
задан OMG Ponies 20 October 2009 в 02:31
поделиться

8 ответов

Я думаю, что ответ Джослис даст только половину результатов. Вам нужно объединить другую таблицу. В качестве альтернативы вы можете выполнить полное внешнее соединение.

select a.Id, a.Name from Table1 a left outer join Table2 b on a.Name = b.Name where b.Id is null
UNION ALL
select a.Id, a.Name from Table2 a left outer join Table1 b on a.Name = b.Name where b.Id is null
10
ответ дан 18 December 2019 в 05:44
поделиться
create table #t1 (Id int, name varchar(50)) 
create table #t2 (Id int, name varchar(50)) 

insert #t1 values (1,       'Prashant')
insert #t1 values (2,      'Ravi')
insert #t1 values (3,       'Gaurav')
insert #t1 values (5,       'Naween')
insert #t1 values (7,       'Sachin')

insert #t2 values (1,       'Prashant')
insert #t2 values (2,       'Ravi')
insert #t2 values (4,       'Alok')
insert #t2 values (6,       'Raja')

select isnull(#t1.id, #t2.id), isnull(#t1.name,#t2.name)  from #t1 
full outer join #t2 on #t1.id = #t2.id
where #t2.Id is null or #t1.id is null

результаты:

3   Gaurav
5   Naween
7   Sachin
4   Alok
6   Raja
5
ответ дан 18 December 2019 в 05:44
поделиться
Select Id, Name
from Table1
where Id not in (select Id from Table2)
UNION 
Select Id, Name
from Table2
where Id not in (select Id from Table1)
5
ответ дан 18 December 2019 в 05:44
поделиться

Вы действительно МОЖЕТЕ сделать это с помощью одного запроса:

SELECT      COALESCE(table1.ID, table2.ID) AS ID,
            COALESCE(table1.Name, table2.Name) AS Name
FROM        table1
FULL JOIN   table2
        ON  table1.ID = table2.ID
WHERE       table1.ID IS NULL OR table2.ID IS NULL

приведет к:

ID          Name
----------- --------
3           Gaurav
5           Naween
7           Sachin
6           Raja
4           Alok
4
ответ дан 18 December 2019 в 05:44
поделиться
    select t.ID, t.Name from Table1 t
    left outer join Table2 tt
    ON tt.name = t.name
    where tt.id is null

    union all

    select t.ID, t.Name from Table2 t
    left outer join Table1 tt
    ON tt.name = t.name
    where tt.id is null
2
ответ дан 18 December 2019 в 05:44
поделиться

Поскольку вы хотите получить несогласованные записи из обеих таблиц, я думаю, вам понадобятся два запроса (по одному для каждой таблицы), которые будут объединены вместе:

(SELECT t1.Id, t1.Name 
 FROM Table1 as t1 
 LEFT OUTER JOIN Table2 as t2 on t1.Name = t2.Name 
 WHERE t2.Id is null)
UNION
(SELECT t2.Id, t2.Name 
 FROM Table2 as t2 
 LEFT OUTER JOIN Table1 as t1 on t2.Name = t1.Name 
 WHERE t1.Id is null)
1
ответ дан 18 December 2019 в 05:44
поделиться
SELECT * FROM 
(
  SELECT * FROM Table1
 MINUS
  SELECT * FROM Table2
)
UNION
(
  SELECT * FROM Table2
 MINUS
  SELECT * FROM Table1
)

или

SELECT * FROM
 Table1 a 
FULL OUTER JOIN
 Table2 b 
ON
 a.ID=b.ID AND a.Name=b.NAME
WHERE
 a.ID IS NULL OR b.ID IS NULL
2
ответ дан 18 December 2019 в 05:44
поделиться
select a.Id, a.Name 
from Table1 a 
left outer join Table2 b 
on a.Name = b.Name 
where b.Id is null

РЕДАКТИРОВАТЬ: Мой ответ неверен .... он даст вам только результаты из Таблицы 1, которых нет в Таблице 2. Спасибо, что указали на это.

1
ответ дан 18 December 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: