使用查询合并两个表

时间:2013-07-04 19:59:32

标签: sql sql-server tsql plsql toad

我是sql的新手。

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

TABLE_A

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

表-B

Name  | AGE
-----------
Milo  |  2

TABLE_B是我的高级表,如果在TABLE_A中包含TABLE_B名称值,则应选择TABLE_B的值。结果如下所示。

RESULT不是表,是查询的结果。

RESULT

Name  | AGE
-----------
Toby  |  2
Milo  |  2
Achmed|  3  

我已经在编程方面解决了这个问题,但我对sql查询抱怨得到这个结果。

TSQL或PLSQL并不重要。

3 个答案:

答案 0 :(得分:3)

如果两个表中都存在Name,则可以使用FULL JOIN从两个表和COALESCE获取所有行,以优先使用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

<强> SQLFiddle DEMO

答案 1 :(得分:1)

你可以使用像这样的联盟“融合”两个结果

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

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

答案 2 :(得分:1)

你也可以在使用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;