首页 > 解决方案 > 获取变量中字符串值的相关数据

问题描述

我有变量@Projects,其中包含名称的字符串数据,例如'Project1;Project2;Project3'

我通过查询得到这个结果:

SELECT 
    @Projects = (SELECT Project_Title+';'
                 FROM Table20
                 FOR XML PATH(''))

我需要获取变量中项目的相关项目的名称,方法是将这些项目中的 与它进行比较,以便再次与它进行比较。IDTable 1Table 2.IDTable 2.RelatedProject_IDTable 1

 Table_1                    Table_2

 Project  | ID  |          | ID  |  RelatedProject_ID  | 
 ---------+-----+          +-----+---------------------+
 Project1 | 001 |          | 001 |      015            |  
 Project2 | 002 |          | 002 |      020            | 
 Project3 | 003 |          | 003 |      031            | 
 Project4 | 004 |          | 004 |      032            | 
 Project5 | 005 |          | 005 |      017            |   

在这种情况下,获取相关项目名称的正确方法是什么?

标签: sqlsql-serversql-server-2014

解决方案


加入table_1table20获取项目的 ID。然后加入table_2获取相关项目的ID。最后再次jointable_1得到相关项目的名称。

SELECT @RelatedProjects = (SELECT t1b.project + ';'
                                  FROM table20 t20
                                       LEFT JOIN table_1 t1a
                                                 ON t1a.project = t20.project_title
                                       LEFT JOIN table_2 t2
                                                 ON t2.id = t1a.id
                                       LEFT JOIN table_1 t1b
                                                 ON t1b.id = t2.related_project
                           FOR XML PATH(''));

(只有在table_1.project唯一的情况下才可靠。考虑table20用他们的 ID 而不是他们的名字来存储项目。)


推荐阅读