Sql 用一个查询合并两个表

Sql 用一个查询合并两个表,sql,sql-server,tsql,plsql,toad,Sql,Sql Server,Tsql,Plsql,Toad,我是sql的新手 有两个不同的表具有相同的列,并假定名称是唯一的 表A Name | AGE ----------- Toby | 2 Milo | 1 Achmed| 3 表B Name | AGE ----------- Milo | 2 TABLE_B是我的上级表,如果TABLE_B name值包含在TABLE_A中,则应选择TABLE_B的值。结果如下所示 结果不是表,而是查询的结果 结果 Name | AGE ----------- Toby | 2 M

我是sql的新手

有两个不同的表具有相同的列,并假定名称是唯一的

表A

Name  | AGE
-----------
Toby  |  2
Milo  |  1
Achmed|  3  
表B

Name  | AGE
-----------
Milo  |  2
TABLE_B是我的上级表,如果TABLE_B name值包含在TABLE_A中,则应选择TABLE_B的值。结果如下所示

结果不是表,而是查询的结果

结果

Name  | AGE
-----------
Toby  |  2
Milo  |  2
Achmed|  3  
我已经在编程方面解决了这个问题,但是为了得到这个结果,我对sql查询很感兴趣

TSQL或PLSQL并不重要。

您可以使用这样的联合来“融合”这两个结果

SELECT Name, AGE FROM TABLE_A
UNION
SELECT Name, AGE FROM TABLE_B
ORDER BY Name;
SQL语句从“TABLE_A”和“TABLE_B”表中选择所有不同的名称和年龄。

您可以使用这样的并集“融合”这两个结果

SELECT Name, AGE FROM TABLE_A
UNION
SELECT Name, AGE FROM TABLE_B
ORDER BY Name;

SQL语句从“TABLE_A”和“TABLE_B”表中选择所有不同的名称和年龄。

您可以使用
完全联接
从两个表中获取所有行,如果两个表中都有名称,则
合并
将优先权赋予TABLE_B

SELECT 
   COALESCE (b.Name, a.Name) as Name
  ,COALESCE (b.Age, a.Age) as Age
FROM Table_A a
FULL JOIN Table_B b ON a.Name = b.Name

您可以使用
完全联接
从两个表中获取所有行,并且
合并
如果两个表中都存在名称,则赋予表B优先权

SELECT 
   COALESCE (b.Name, a.Name) as Name
  ,COALESCE (b.Age, a.Age) as Age
FROM Table_A a
FULL JOIN Table_B b ON a.Name = b.Name

您还可以在使用union时消除任何重复项,我认为这比完全联接要快:

SELECT Name, Age FROM Table_B
UNION
SELECT Name, Age FROM Table_A WHERE TABLE_A.NAME NOT IN (SELECT Name FROM Table_B)
ORDER BY Name;

您还可以在使用union时消除任何重复项,我认为这比完全联接要快:

SELECT Name, Age FROM Table_B
UNION
SELECT Name, Age FROM Table_A WHERE TABLE_A.NAME NOT IN (SELECT Name FROM Table_B)
ORDER BY Name;

这将无法按预期工作-因为它将为
Milo|1
Milo|2
返回两行。这将无法按预期工作-因为它将为
Milo|1
Milo|2