联合两个具有主ID字段的不同表

时间:2012-09-05 15:56:45

标签: sql sql-server-2008

我有两张桌子

MD_Master  (Medical checks)
Id
...

CD_Personal (Personal Checks)
Id
...

两个表中的每个字段名称都是不同的名称,类型和数据。

但是,每个人都有一个主键Id,并且可能与其他人发生冲突。

即。 Id101

都可以存在MD_Master CD_Personal

我想创建一个梳理两个表的视图(组合MD_MedicalCD_Personal Id字段),但我不知道如何处理Id

我希望视图Numeric(19,0)Id

是否可以选择并对这两个不同的表进行联合并创建唯一的ID?

由于

3 个答案:

答案 0 :(得分:3)

目前还不清楚你要在这里做什么,但你可以在每一行上创建一个类似于此的标识符:

SELECT Id, 'M' as tbl
FROM MD_Master
UNION ALL
SELECT Id, 'P' as tbl
FROM CD_Personal

这将允许您通过查看记录来自哪个表来区分每一行。然后,如果您有相同ID的记录,您将知道来自哪个表。

答案 1 :(得分:1)

您可以尝试这样的事情:

declare @medical table(id int, checks varchar(10))

declare @personal table(id int, checks varchar(10))

insert into @medical 
select 1, 'abc1'
union
select 2, 'abc2'

insert into @personal
select 1, 'abc1'
union
select 2, 'abc22'

;WITH CTE AS (
select *, 'M' As Src from @medical 
union
select *, 'P' As Src from @personal
)

SELECT checks, src, ROW_NUMBER() over (order by checks, id) new_id FROM CTE

在你的情况下:

SELECT checks, src, ROW_NUMBER() over (order by [checks], id) new_id 
FROM 
(

SELECT id, [Medical checks] Checks, 'M' as Src FROM MD_Master
UNION ALL
SELECT id, [Personal checks] Checks, 'P' as Src FROM CD_Personal

)

答案 2 :(得分:0)

也许你可以将ID连接起来以阻止冲突?如有必要,你可以再次解析它,即....

SELECT CONVERT(varchar, ID) + 'MD', FirstName, LastName, DOB FROM MD_Master
UNION
SELECT CONVERT(varchar, ID) + 'CD', FirstName, LastName, DOB FROM CD_Personal

之后您想要对数据做什么?