我是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并不重要。
答案 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;