2016-12-31 53 views
0

我只想从表1中获取与表2相关的常见值,如下图所示。
如何,如下面图片中所示的结果显示我少见值
这是我使用的查询,但它如我所料如何从表1和表2中获取不常见的值

select * from t1.* from Table1 t1 inner join Table2 t2 on t1.Name <> t2.Name 
不显示结果

enter image description here

+0

请解释逻辑。为什么“SQL 2K12”的结果? –

+1

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557#285557 –

回答

1
SELECT * FROM TableA 
FULL OUTER JOIN TableB 
ON TableA.name = TableB.name 
WHERE TableA.id IS null 
OR TableB.id IS null 

在的情况下,外连接少见行不存在在其他各行中产生一个NULL字段。我们基本上这样选择它。

+0

感谢它的工作 – user6503334

0

使用ExceptUnion All 。不知道为什么"SQL 2K12"是结果,因为它存在于两个表

select col from table1 
except 
select col from table2 
Union all 
select col from table2 
except 
select col from table1 
+0

i updated image – user6503334

+0

我收到错误消息:消息205,级别16,状态1,行1 所有使用UNION,INTERSECT或EXCEPT运算符组合的查询在其目标列表中必须具有相同数量的表达式。 – user6503334

+0

@ user6503334 - 您如何在原始查询中进行替换。 select中的列数应该相同也应该键入兼容 –

0

Select col 
From (
     Select col from Table1 
     Union All 
     Select col from Table2 
    ) A 
Group By col 
Having count(*)=1 
0

这是根据你的例子另一种选择

SELECT * -- or SELECT COALESCE(t1.Name,t2.Name) As Name 
FROM 
    Table1 t1 
    FULL OUTER JOIN Table2 t2 ON t1.Name = t2.Name 
WHERE 
    t1.Name IS NULL OR t2.Name IS NULL; 

如果有两个表中只有一列(或两个表具有相同的列),如果你不希望这些列重复

SELECT * 
FROM 
    Table1 
UNION 
SELECT * 
FROM 
    Table2 

EXCEPT 
(
SELECT * 
FROM 
    Table1 
INTERSECT 
SELECT * 
FROM 
    Table2 
) 
相关问题