在这个例子中,你给你根本不需要连接。我希望,这是一个真实的例子,而不是人为的。你想做的事情在这里很简单,你根本不需要连接,你不需要row_number。你可以这样说:
select id,Username,Fullname from Users
UNION ALL
select id,Username,Fullname from GrobUsers
where id not in (select id from Users)
UNION ALL
select id,Username,Fullname from FrobUsers
where id not in (select id from Users) and id not in (select id from GrobUsers)
,它会给你:
id Username Fullname
----------- ---------- -----------------
7 iboyd Ian Boyd
8 nicholle Nicholle Kuzniak
9 chris Chris Windibank
10 jamie Jamie Bellaire
(4 row(s) affected)
下面是测试情况下,我用:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Users]') AND type in (N'U'))
DROP TABLE [dbo].[Users]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GrobUsers]') AND type in (N'U'))
DROP TABLE [dbo].[GrobUsers]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[FrobUsers]') AND type in (N'U'))
DROP TABLE [dbo].[FrobUsers]
GO
CREATE TABLE [dbo].[Users](
[Id] [int] NOT NULL,
[Username] [nchar](50) NULL,
[Fullname] [nchar](50) NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[GrobUsers](
[Id] [int] NOT NULL,
[Username] [nchar](50) NULL,
[Fullname] [nchar](50) NULL,
CONSTRAINT [PK_GrobUsers] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[FrobUsers](
[Id] [int] NOT NULL,
[Username] [nchar](50) NULL,
[Fullname] [nchar](50) NULL,
CONSTRAINT [PK_FrobUsers] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT INTO Users Values (7,'iboyd','Ian Boyd')
INSERT INTO Users Values (8,'nicholle','Nicholle Kuzniak')
INSERT INTO Users Values (10,'jamie','Jamie Bellaire')
INSERT INTO [GrobUsers] Values (7,'iboyd','Ian Alexander Boyd ')
INSERT INTO [GrobUsers] Values (8,'nicholle','Nicholle Bachand')
INSERT INTO [GrobUsers] Values (9,'chris','Chris Windibank')
INSERT INTO [FrobUsers] Values (7,'iboyd','Ian')
INSERT INTO [FrobUsers] Values (9,'nicholle','Chris W.')
INSERT INTO [FrobUsers] Values (10,'jamie','James Bellaire')
GO
我还没有得到关于开发工具这台计算机没有尝试过,但是你可以使用'CROSS APPLY'然后使用'ROW_NUMBER'重新分区,并且返回ROW_NUMBER为1的行吗? – 2011-06-10 21:28:59