【发布时间】:2020-12-06 20:23:23
【问题描述】:
我有两个表和一个相当复杂的 SQL 查询来从这些表中提取数据 - 这一切正常,直到它遇到具有多个 id 的列中的值 - 逗号分隔。因此,为了简化我正在努力解决的领域,让我们假设以下内容
表 1 (T1)
ID First Name Last Name Active
--------------------------------------------
101 Fred Bloggs 1
102 John Smith 0
103 Elizabeth Dawson 1
104 Amy Johnson 1
表 2 (T2)
ID Postcode HouseNo
-----------------------------------
101 TS15 9AZ 42
102 TQ1 4TF 3
103, 104 WA1 4AA 7
所以假设我想返回谁住在哪个地址的结果,我加入 ID 上的表并编写一个相当简单的查询,例如
select
T1.FirstName + ' ' + T1.Lastname as fullname, T2.Postcode, T2.HouseNo
from
T1
join
t2 on t1.id = t2.id
where
t1.active = 1
此查询正常工作,直到它返回错误时遇到逗号分隔值:
将 varchar 值 '103,104' 转换为数据类型 int 时转换失败
它应该返回的是
Fullname PostCode HouseNo
-------------------------------------------------------
Fred Blogs TS15 9AZ 42
Elizabeth Dawson Amy Johnson TQ1 4TF 3
关于如何进行这项工作的任何想法?
【问题讨论】:
-
在单个数据库单元格中存储 comma-separated 值列表是一个很大的 NO-NO 并且会 - 正如您在此处看到的那样 - 只会导致你的悲伤和心痛。您应该遵守数据库设计的第一范式 - 单个单元格最多包含一个原子值 - 以适当的关系方式处理多个值
-
我想你会在表 2 的设计中看到 cmets。您收到的错误是由于 T1.ID 是 INT 而 T2.ID 是字符串(以“,”为例)。加入这两列将失败。将 T2 更改为 ID 103 和 104 有两个单独的行 - 然后 JOIN 将起作用。
标签: sql sql-server csv tsql sql-server-2012