【发布时间】:2021-12-11 11:37:18
【问题描述】:
有没有办法使用第一个表中的逗号分隔值从另一个表中选择行?
表 1.faculty
| subject |
|---|
| 101, 102 |
| 104 |
| 103, 105 |
表 2.subject
| code | subject |
|---|---|
| 101 | subject 1 |
| 102 | subject 2 |
| 103 | subject 3 |
| 104 | subject 4 |
| 105 | subject 5 |
预期输出:
| subject | subject |
|---|---|
| 101, 102 | subject 1, subject 2 |
| 104 | subject 4 |
| 103, 105 | subject 3, subject 5 |
我已经试过了:
SELECT faculty.subject, subject_offered.code, subject_offered.subject
FROM faculty
LEFT JOIN subject_offered
ON subject_offered.code
IN (faculty.subject)
但faculty 中具有多个值(逗号分隔)的行在subject 表的代码和主题列中显示为NULL。
【问题讨论】:
-
表达您的模式/示例表数据的最理想方式是创建一个 sql fiddle。然后志愿者可以立即使用真实数据并自信地发布答案。 Is storing a delimited list in a database column really that bad?
FIND_IN_SET()怎么样?我无法想象您是 Stack Overflow 上第一个询问如何克服“糟糕的表格设计”挑战的人。 -
您使用的是 SQL Server 吗?我没有在问题的任何地方看到这一点。
-
真正的解决方案当然是改变你的数据模型。当您对单独的值感兴趣时,不要存储逗号分隔的值。这违反了数据库规范化,而不是如何使用关系数据库。修复此问题后,编写查询将变得更容易。一般来说,它们也会更快。并且 DBMS 将能够保证数据的一致性(即您在集合中找到的 ID 确实存在)。
-
我的错,我使用的是 SQL 服务器。感谢您的建议
标签: sql