0

我有两张桌子

  • 表 A 有列id|name|age
  • 表 B 有列id|name|age

表 A 中的样本记录

1|xavi     |23
2|christine|24
3|faisal   |25
5|jude     |27

表 B 中的样本记录

1|xavi     |23
2|christine|22
3|faisal   |23
4|ram      |25

如果表 A 中的 id 值在表 B 中匹配,则仅从表 A 中获取记录。同时获取仅存在于表 A 中的记录 也获取仅存在于表 B 中的记录

所以我的结果应该是

1|xavi     |23
2|christine|24
3|faisal   |25
4|ram      |25
5|jude     |27
4

4 回答 4

1

您可以简单地使用联合运算符从两个表中获取唯一值。运算符 UNION 将删除重复的值。

SELECT * FROM tableA AS t1
UNION
SELECT * FROM tableB AS t2
于 2013-09-01T15:29:24.860 回答
0
select distinct * FROM 
(
select ID, NAME, AGE from TableA
UNION ALL 
select ID, NAME, AGE from TableB
) TableAB

需要考虑的一些事项 --> 除非您要更新特定表并且记录相同,否则您从哪个表查看记录并不重要(因为它们是相同的......)。

如果您想查看记录来自哪个表,请告诉我,我也会向您展示如何执行此操作...但是查询更复杂,我真的不认为它是所描述的目的所必需的以上。让我知道这是否有帮助...谢谢,布赖恩

于 2013-09-01T15:28:03.527 回答
0

如果表格具有您需要的关系:

Select DISTINCT * 
  from tableA a
 Inner Join tableB b
    On a.id = b.id

如果不:

您必须使用 UNION 并在使用 DISTINCT 之后。DISTINCT 不允许重复行。

于 2013-09-01T15:33:11.857 回答
0

你在这里有一个优先级问题。取出表 A 中的所有记录,然后取出表 B 中的额外记录:

select *
from A
union all
select *
from B
where B.id not in (select A.id from A);

您也可以用 a 来表达这一点full outer join(假设id在任一表中都没有重复):

select coalesce(A.id, B.id) as id,
       coalesce(A.name, B.name) as name,
       coalesce(A.age, B.age) as age
from A full outer join
     B
     on A.id = B.id;

在这种情况下,coalesce()优先考虑 中的值A

于 2013-09-01T16:20:46.977 回答