Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql DB列提取和拆分以查找其他表结果_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

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。把它们分门别类地储存起来,让自己的生活变得轻松。