0

我是 sql 的新手。

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

表_A

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

表_B

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

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

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

结果

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

我已经在编程方面解决了这个问题,但是我很想用 sql 查询来得到这个结果。

TSQL 或 PLSQL 无关紧要。

4

3 回答 3

3

您可以使用FULL JOIN从两个表中获取所有行,并COALESCE在两个表中都存在 Name 时赋予 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 演示

于 2013-07-04T20:09:14.540 回答
1

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

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;
于 2013-07-04T20:29:54.613 回答
1

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

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

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

于 2013-07-04T20:03:54.510 回答