DB列提取并拆分以查找其他表结果

时间:2016-03-12 06:07:11

标签: sql sql-server sql-server-2012

我有table1其中Temp_ID列是ID列值table2table3的组合。

示例:table1_id:table2_id {值类似于(1:1,2:2)}

我在Java代码中的操作我需要使用Temp_ID并根据COLON(:)拆分,然后我们可以使用获取的ID值获取表2和表3数据来自分裂。

但是table1可能有大量数据,所以如果我在java中这样做,我需要一次又一次地运行2个查询。

是否可以编写查询,因此我可以在查询中对Temp_ID执行此分割,并使用它们执行JOIN并在MS SQL中获取数据。

1 个答案:

答案 0 :(得分:1)

我想说的很好。这是一个类似的事情的查询

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')

<强>输出 PS:注意输出中的null处理 enter image description here