如何从两个不同的表创建自定义表

时间:2016-02-12 10:08:11

标签: sql-server merge sql-server-2008-r2 inner-join

我正在使用SQL Server 2008 R2。我有一些关于从两个表中获取数据的问题。

我有一张(第一张)表格如下:

enter image description here

在此表中,我为第二个表存储了一组id。

这是第二张表:

enter image description here

上图是具有主键的主表。

现在我想创建自定义表来读取第一个表中的数据,并检查该id是否存在于第二个表中,如果是,我的自定义表应该有关于它的条目。我还希望从我的自定义表中获取两个表中的其他记录。

任何解决方案都将受到赞赏。

2 个答案:

答案 0 :(得分:2)

这里我们将使用PARSE NAME使用ID值,然后将它们与现有记录的两个表进行比较

declare @table1 table (ID varchar(10))
insert into @table1(ID) values ('3,4,6'),('1,2,3'),('2,3'),('1,2,3'),('1,2')

declare @table2 table (ID int)
insert into @table2(ID) values(1),(2),(3),(4),(5),(6),(7),(8)

Declare @Custom Table (ID INT)
;WITH CTE AS (

SELECT 
PARSENAME(REPLACE(Split.a.value('.', 'VARCHAR(100)'),'-','.'),1) 'ID' 
FROM  
(
     SELECT 
     CAST ('<M>' + REPLACE([ID], ',', '</M><M>') + '</M>' AS XML) AS Data 
     FROM @table1     
) AS A 
CROSS APPLY Data.nodes ('/M') AS Split(a))

INSERT INTO @Custom (ID)
Select T.ID from @table2 T
 WHERE   EXISTS 
 (SELECT DISTINCT C.ID 
        FROM CTE C 
    WHERE T.ID = C.ID) 

select * from @Custom

答案 1 :(得分:2)

根据我的要求,我在mohan111

提供的答案的基础上得到了这个解决方案
;WITH CTE AS (
SELECT 
PARSENAME(REPLACE(Split.a.value('.', 'VARCHAR(100)'),'-','.'),1) 'ID'
FROM  
(
     SELECT 
     CAST ('<M>' + REPLACE(Id, ',', '</M><M>') + '</M>' AS XML) AS Data
     FROM table1
) AS A 
CROSS APPLY Data.nodes ('/M') AS Split(a))

SELECT ColumnName FROM CTE C 
join table2 im on im.Id = c.ID