ID 的 CSV 到值的 CSV

Val*_*luk 5 sql sql-server csv

假设我在数据库中有一个列,其中包含以逗号分隔的 ID 列表(请不要问为什么 :( ),即像这样的列:

id  |  ids
----------
1   |  1,3,4
2   |  2
3   |  1,2,5
Run Code Online (Sandbox Code Playgroud)

以及 ids 相关的表:

id  |  thing
---------------
1   |  fish
2   |  elephant
3   |  monkey
4   |  mongoose
5   |  kiwi
Run Code Online (Sandbox Code Playgroud)

如何根据第一个表中的 id 选择逗号分隔的事物列表?例如,选择 1 会给我,,'fish,monkey,mongoose'3 会给我'fish,elephant,kiwi'等等?

谢谢!

bvr*_*bvr 4

尝试这个

SELECT ID, things = STUFF(
(
  SELECT ',' + t2.thing 
     FROM Table2 AS t2
    INNER JOIN Table1 AS ti
    ON ',' + ti.ids + ',' LIKE '%,' + CONVERT(VARCHAR(12), t2.id) + ',%'
    WHERE ti.ID = tout.ID
    FOR XML PATH, TYPE
).value('.[1]', 'nvarchar(max)'), 1, 1, '')
FROM Table1 AS tout
ORDER BY ID
Run Code Online (Sandbox Code Playgroud)

SQL FIDDLE 演示

  • 这是一个非常聪明的想法和简单的解决方案,无需拆分。+1 (2认同)