【问题标题】:Column values separated by comma用逗号分隔的列值
【发布时间】:2012-06-23 09:42:00
【问题描述】:

我在 SQL Server Table1Table2Table3 中有 3 个表,其中 Table1 中的一列具有其他两个表的以逗号分隔的 PK 值。

现在我想将 Table1 列中的值分开,并根据找到的值从其他两个表中选择数据。

【问题讨论】:

  • 为什么不更好地设计您的数据库...
  • 数据库不是我设计的......但现在我们已经到了无法更改的阶段
  • 可以 (1) 将两列 FKTb12FKTbl2 添加到您的表中,(2) 从中提取数据一次逗号分隔的列到 FKTb12FKTbl2 列中,(3) 建立从 FKTb12FKTbl2 列到 Table2Table3 的适当 FK 约束,然后 (4) 放弃糟糕的逗号分隔列全部在一起!很简单,真的...
  • @marc_s:完全同意你的观点,这确实很容易。但也许 OP 意味着问题不仅仅是将 CSV 列转换为一组列。某些已经存在并且可能在生产中使用的代码也可能需要更改。我不是在为一般情况辩护,我的意思只是它可能并不那么容易。

标签: sql sql-server sql-server-2008 multiple-select-query


【解决方案1】:

试试这个

Select Table1PkValue,Table2PKValue
From
(
    Select SubString(PKColumn, 0,CharIndex(PKColumn, ',')) As    
    Table1PkValue,SubString(PKColumn, 
    CharIndex(PKColumn,',')+1,Len(PKColumn)-CharIndex(PKColumn,',')+1) As Table2PKValue
    From Table1
 )
As T
INNER JOIN Table2 ON Table2.PkColumn=T.Table1PkValue
INNER JOIN Table3 ON Table3.PKColumn=T.Table2KValue

请注意,您的 Table1 的 PKColumn 应该有逗号分隔的值。表 2 的第一个值和表 3 的第二个值。

如果有语法错误则忽略

【讨论】:

    猜你喜欢
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多