【发布时间】:2011-06-10 21:24:02
【问题描述】:
我想在三个表上执行FULL OUTER JOIN,合并公共行。
SELECT * FROM Users
id Username Fullname
== ======== =====================
7 iboyd Ian Boyd
8 nicholle Nicholle Kuzniak
10 jamie Jamie Bellaire
3 row(s) affected
SELECT * FROM GrobUsers
id Username Fullname
== ======== =====================
7 iboyd Ian Alexander Boyd
8 nicholle Nicholle Bachand
9 chris Chris Windibank
3 row(s) affected
SELECT * FROM FrobUsers
id Username Fullname
== ======== =====================
7 ian Ian
9 chris Chris W.
10 jamie James Bellaire
3 row(s) affected
我想根据id 列合并表格。
这带来了我该如何做的问题 希望在对方解决冲突时 列值不同。算法 可用于解决用户名和全名之间冲突的方法是:
if (id's are equal) then pick one; i don't care
我尝试过类似的方法:
SELECT
COALESCE(Users.id, GrobUsers.id, FrobUsers.id) AS id,
COALESCE(Users.Username, GrobUsers.Username, FrobUsers.Username) AS Username,
COALESCE(Users.FullName, GrobUsers.FullName, FrobUsers.FullName) AS Fullname
FROM Users
FULL OUTER JOIN GrobUsers ON GrobUsers.id = Users.id
FULL OUTER JOIN FrobUsers ON FrobUsers.id = .....something......
【问题讨论】:
-
我在这台计算机上没有开发工具,所以没有尝试过,但是你可以使用
CROSS APPLY,然后使用由 ID 字段之一分区的ROW_NUMBER重新查询并返回行ROW_NUMBER是 1?
标签: sql-server sql-server-2000 full-outer-join