sql - 如何使用第一个表中的逗号分隔值从另一个表中选择行?
问题描述
有没有办法使用第一个表中的逗号分隔值从另一个表中选择行?
表格1。faculty
学科 |
---|
101, 102 |
104 |
103, 105 |
表 2。subject
代码 | 学科 |
---|---|
101 | 科目一 |
102 | 科目二 |
103 | 主题 3 |
104 | 科目四 |
105 | 主题 5 |
预期输出:
学科 | 学科 |
---|---|
101, 102 | 科目一、科目二 |
104 | 科目四 |
103, 105 | 科目三、科目五 |
我已经尝试过了:
SELECT faculty.subject, subject_offered.code, subject_offered.subject
FROM faculty
LEFT JOIN subject_offered
ON subject_offered.code
IN (faculty.subject)
但是faculty
具有多个值(逗号分隔)的行在代码和表中的主题列中显示 NULL subject
。
解决方案
更新
请参阅@Akina 的答案以获得完整正确和更清洁的解决方案。
虽然这是一个非常糟糕的桌子设计,但仍有办法解决这个问题。
解决方案
SELECT faculty_subject AS faculty_subject_codes, GROUP_CONCAT(subject ORDER BY code ASC) AS subjects
FROM (
SELECT faculty.subject as faculty_subject, subject.*
FROM subject
JOIN faculty
ON faculty.subject LIKE CONCAT('%', subject.code, '%')
) fa GROUP BY faculty_subject;
给
Faculty_subject_codes | 科目 |
---|---|
101,102 | 科目一、科目二 |
103,105 | 科目三、科目五 |
104 | 科目四 |
解释
由于faculty.subject
是逗号分隔的值,因此您不能通过 进行常规连接subject.code
,因此解决方法是改用JOIN
withLIKE
子句。
SELECT faculty.subject as faculty_subject, subject.*
FROM subject
JOIN faculty
ON faculty.subject LIKE CONCAT('%', subject.code, '%');
教师主题 | 代码 | 学科 |
---|---|---|
101,102 | 101 | 科目一 |
101,102 | 102 | 科目二 |
103,105 | 103 | 主题 3 |
104 | 104 | 科目四 |
103,105 | 105 | 主题 5 |
现在我们有多个具有相同 Faculty_subject 的行,例如代码 103 和 105。接下来是将这些重复的行合并到一个条目中,我们将使用GROUP CONCAT
语句来执行此操作,GROUP BY
并且faculty_subject
SELECT faculty_subject AS faculty_subject_codes, GROUP_CONCAT(subject ORDER BY code ASC) AS subjects
FROM (
SELECT faculty.subject as faculty_subject, subject.*
FROM subject
JOIN faculty
ON faculty.subject LIKE CONCAT('%', subject.code, '%')
) fa GROUP BY faculty_subject;
推荐阅读
- verilog - 设计有效/就绪握手的方法
- azure-stream-analytics - 如何在流分析中检查 JSON 属性中的空值?
- php - 当他不应该出现404错误时:laravel
- command-line-interface - 将应用程序发布到 Cloud Foundry 错误:超出组织的内存限制。怎么修?
- mysql - 正则表达式到 mysql 正则表达式
- java - TestNg DataBinding : 在测试启动时设置属性的位置
- python - 当负数以小数为动力时,Python返回一个复数,为什么?
- python-3.x - Pytest:测试的运行时参数化
- javascript - @types/react/index\"' 没有默认导出。",
- maven - 如何让 openshift 在 Maven 构建中使用正确的工件