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

3
我可以帮您翻译成中文。这段内容是关于使用 SQL Server 2008 R2 时从两个表中获取数据的问题。第一个表如下所示:

enter image description here

在这个表格中,我存储了第二个表格的一组id。
这里是第二个表格:

enter image description here

上面的图片是具有主键的主表。

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

任何解决方案都将不胜感激。


2
给我一些解决方案。这听起来像是一个命令,如果你想得到答案,最好礼貌一点! - HoneyBadger
1
如果这些记录在两个表中都存在,那么你就不想输入,如果这些记录不存在,则应该输入到第二个表中,这就是你想要的。 - mohan111
1
@HoneyBadger,如果你知道任何解决方案,请告诉我。 - Mahavirsinh Padhiyar
@mohan111 我需要检查任意一个字段,比如第二行是否包含1、2、3,所以我只想检查表中是否有1、2和3,如果有,我想在我的自定义表中获取相应ID的记录。 - Mahavirsinh Padhiyar
所以你想要检查第二个表中是否存在ID,然后我们需要将其插入到自定义表中。但是你的问题根本不清楚。 - mohan111
显示剩余3条评论
2个回答

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

@oMV1请检查解决方案并根据您的要求进行修改。 - mohan111
是的,它完全给了我想要的数据,谢谢mohan111,感激不尽。 - Mahavirsinh Padhiyar

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接