Sql 从匹配记录中删除并添加不相等的数据
我有以下表格: 表a:Sql 从匹配记录中删除并添加不相等的数据,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有以下表格: 表a: Name T1 T2 T3 T4 表b: Name T1 T2 T3 T4 T5 T6 我需要从表a中选择全部,并从表b中添加表a中没有的内容,结果如下: T1 T2 T3 T4 T5 T6 感谢您的帮助这里有一种方法: Select distinct Name from ( select Name from Table A UNION ALL select Name from Table B
Name
T1
T2
T3
T4
表b:
Name
T1
T2
T3
T4
T5
T6
我需要从表a中选择全部,并从表b中添加表a中没有的内容,结果如下:
T1
T2
T3
T4
T5
T6
感谢您的帮助这里有一种方法:
Select distinct Name
from (
select Name from Table A
UNION ALL
select Name from Table B
)
有一种方法可以做到这一点:
Select distinct Name
from (
select Name from Table A
UNION ALL
select Name from Table B
)
如果您想要两个表中的所有唯一名称,请使用
UNION
:
select name from table_a
union
select name from table_b;
如果您想要两个表中的所有唯一名称,请使用
UNION
:
select name from table_a
union
select name from table_b;
还有一种方法:
select ta.name from ta
union all
select tb.name from tb
left join ta
on tb.name = ta.name
where ta.name is null
还有一种方法:
select ta.name from ta
union all
select tb.name from tb
left join ta
on tb.name = ta.name
where ta.name is null
我会用一个反连接(一个不在条件下)来实现这一点。如下文所述,如果表
a
中的该列中可能出现NULL
(在这种情况下,应使用不存在
的条件写入反连接),则它将无法正常工作。我假设该列为非空
反联接比联接快,因为只要在a
中也找到表b
中的值,表b
中该行的联接就会停止,处理将移到下一行。在连接中,连接继续,不存在此类短路
Oto的解决方案使用连接而不是反连接。然而,我相信Oracle查询优化器在这个简单的例子中认识到,反连接就足够了,它将重写查询以使用反连接。您可以通过在两个查询上运行Explain Plan来验证这一点。尽管如此,在一个类似但复杂得多的问题中,优化器可能无法“看到”这条捷径;这就是为什么我认为最好显式地编写反连接(和半连接,其中我们在中使用,或存在
条件),而不是依赖优化器
查询应该是
select name from a
union all
select name from b where name not in ( select name from a );
我会用一个反连接(一个不在条件下)来实现这一点。如下文所述,如果表a
中的该列中可能出现NULL
(在这种情况下,应使用不存在
的条件写入反连接),则它将无法正常工作。我假设该列为非空
反联接比联接快,因为只要在a
中也找到表b
中的值,表b
中该行的联接就会停止,处理将移到下一行。在连接中,连接继续,不存在此类短路
Oto的解决方案使用连接而不是反连接。然而,我相信Oracle查询优化器在这个简单的例子中认识到,反连接就足够了,它将重写查询以使用反连接。您可以通过在两个查询上运行Explain Plan来验证这一点。尽管如此,在一个类似但复杂得多的问题中,优化器可能无法“看到”这条捷径;这就是为什么我认为最好显式地编写反连接(和半连接,其中我们在
中使用,或存在
条件),而不是依赖优化器
查询应该是
select name from a
union all
select name from b where name not in ( select name from a );
表a中有重复的吗?如果表a中有重复项,是否希望结果也有相同的重复项?表b怎么样?两个表中都没有重复项。表a中有重复项吗?如果表a中有重复项,是否希望结果也有相同的重复项?那么表b呢?两个表中都没有重复项。虽然准确,但这是不必要的复杂,因为一个简单的联合
会做同样的事情。谢谢Jeremy,还有其他方法吗?它们的速度不同,都是为了不同的方法。感谢mathguy:谢谢,我会测试它,看起来不错。虽然准确,但这是不必要的复杂,因为一个简单的union
做同样的事情。谢谢Jeremy,有没有其他方法,有明显的慢感谢所有不同的方法。谢谢,我会测试一下,看起来不错。这可能是最快的方法。这可能是最快的方法。