【发布时间】:2015-11-11 02:49:39
【问题描述】:
我有两张表,Student 和 Reference。我想在 Reference.ReferenceCode 上加入 student.code。问题是学生可以在一个代码列中有多个代码。我想以这样一种方式加入,即当学生表中有一个学生的多个代码时会产生多行。这是我所拥有的以及我尝试过的:
Student 有两列:ID & Code
|Student ID |Code |
|Student1 |Code1 |
|Student2 |Code1,Code2,Code3|
ReferenceCode 有两列:ReferenceCode & Description
|ReferenceCode|Description |
|Code1 |This is code 1 |
|Code2 |This is code 2 |
|Code3 |This is code 3 |
我尝试过使用子字符串:
select a.studentID, a.code, b.ReferenceCode, b.Description
from Student a
left join Reference b --Have also tried inner join; No difference
on b.ReferenceCode = substring(a.Code,1,len(b.ReferenceCode))
子字符串生成下表。注意,它只匹配第一个代码:
|Student ID |Code |ReferenceCode |Description |
|Student1 |Code1 |Code1 |This is code 1 |
|Student2 |Code1,Code2,Code3|Code1 |This is code 1 |
我也试过like方法:
select a.studentID, a.code, b.ReferenceCode, b.Description
from Student a
left join Reference b --Have also tried inner join; No difference
on b.ReferenceCode like '%' + a.Code + '%'
但是这种方法导致的表只匹配学生表中只有一个代码的记录:
|Student ID |Code |ReferenceCode |Description |
|Student1 |Code1 |Code1 |This is code 1 |
*Student 2 doesn't pull*
我想看到的是这样的:
|Student ID |Code |ReferenceCode |Description |
|Student1 |Code1 |Code1 |This is code 1 |
|Student2 |Code1,Code2,Code3|Code1 |This is code 1 |
|Student2 |Code1,Code2,Code3|Code2 |This is code 2 |
|Student2 |Code1,Code2,Code3|Code3 |This is code 3 |
【问题讨论】:
-
如果你不介意我问,你能改变数据库的结构吗?如果可以的话,值得花时间这样做,而不是尝试以目前的方式迎合这种结构。
-
@GrandMasterFlush 的意思是您在单列中有分隔值。这违反了 1NF 并使查询比应有的更痛苦。如果您绝对无法解决此问题,那么您需要一个字符串拆分器。你可以在这里找到一篇关于这类事情的好文章。 sqlperformance.com/2012/07/t-sql-queries/split-strings
-
@GrandMasterFlush 这是我非常非常想要发生的事情。问题在于业务问题 - 这些文件是来自供应商给我们的文件,等待最终修复可能比我编写代码要慢。
-
运气不好。我认为大多数开发人员以前都处于那个位置!
标签: sql-server join