Sql DB列提取和拆分以查找其他表结果
我有Sql DB列提取和拆分以查找其他表结果,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有table1,其中Temp\u ID列是ID列值的组合,形成table2和table3 示例:table1\u id:table2\u id{类似(1:1,2:2)的值] 我在Java代码中所做的我需要使用Temp_ID并根据冒号(:)进行拆分,然后我们可以使用从拆分中获得的ID值获得表2和表3数据 但是table1可以有大量的数据,所以如果我用java做这件事,我需要一次又一次地运行2个查询 是否可以编写查询,这样我就可以在查询中拆分Temp\u ID,并使用这些拆分来执行连接,并在MS
table1
,其中Temp\u ID
列是ID
列值的组合,形成table2
和table3
示例:table1\u id:table2\u id
{类似(1:1,2:2)的值]
我在Java代码中所做的我需要使用Temp_ID
并根据冒号(:)进行拆分,然后我们可以使用从拆分中获得的ID值获得表2和表3数据
但是table1
可以有大量的数据,所以如果我用java做这件事,我需要一次又一次地运行2个查询
是否可以编写查询,这样我就可以在查询中拆分
Temp\u ID
,并使用这些拆分来执行连接
,并在MS SQL本身中获取数据。我想说的是,思路很好。这里有一个这样做的问题
SELECT
t1.temp_id
-- ... put your column list here from t2 and t3 here like t2.name
FROM table1 t1
LEFT JOIN table2 t2
ON CAST(LEFT(t1.temp_id,CHARINDEX(':',t1.temp_id)-1) AS INT)=t2.ID
LEFT JOIN table3 t3
ON CAST(RIGHT(t1.temp_id,CHARINDEX(':',REVERSE(t1.temp_id))-1) AS INT)=t3.ID
这里有一个小脚本,用于测试这一点
create table table1 (temp_id varchar(10))
insert into table1 values('1:1'),('21:2'),('1:22'),('1:'),(':2')
create table table2 (id int, value varchar(2))
insert into table2 values (1,'1'),(21,'21'),(1,'1')
create table table3 (id int, value varchar(2))
insert into table3 values (1,'1'),(2,'2'),(22,'22')
输出
注意输出中的null
处理
您可以在查询中使用字符串拆分来拆分此项,并相应地使用Ref。虽然您确实得到了问题的解决方案,但我建议不要以这种方式存储ID。把它们分门别类地储存起来,让自己的生活变得轻松。