我有table1
其中Temp_ID
列是ID
列值table2
和table3
的组合。
示例:table1_id:table2_id
{值类似于(1:1,2:2)}
我在Java代码中的操作我需要使用Temp_ID
并根据COLON(:)拆分,然后我们可以使用获取的ID值获取表2和表3数据来自分裂。
但是table1
可能有大量数据,所以如果我在java中这样做,我需要一次又一次地运行2个查询。
是否可以编写查询,因此我可以在查询中对Temp_ID
执行此分割,并使用它们执行JOIN
并在MS SQL中获取数据。
答案 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')