我正在使用SQL Server 2008 R2。我有一些关于从两个表中获取数据的问题。
我有一张(第一张)表格如下:
在此表中,我为第二个表存储了一组id。
这是第二张表:
上图是具有主键的主表。
现在我想创建自定义表来读取第一个表中的数据,并检查该id是否存在于第二个表中,如果是,我的自定义表应该有关于它的条目。我还希望从我的自定义表中获取两个表中的其他记录。
任何解决方案都将受到赞赏。
答案 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