【发布时间】:2016-05-29 21:52:50
【问题描述】:
我有两个表 - 类似于下面。第一个表存储有关每个作业的信息:
+--------+------------+
| JOB_ID | JOB_NAME |
+--------+------------+
| | |
| 1 | Test Job 1 |
| | |
| 2 | Test Job 2 |
| | |
| 3 | Test Job 3 |
| | |
| 4 | Test Job 4 |
| | |
| 5 | Test Job 5 |
| | |
| 6 | Test Job 6 |
| | |
| 7 | Test Job 7 |
+--------+------------+
第二个表,存储与每个工作相关的一个或多个“主题”:
+------------+--------+------------------+
| SUBJECT_ID | JOB_ID | SUBJECT_NAME |
+------------+--------+------------------+
| | | |
| 1 | 1 | Test Subject #1 |
| | | |
| 2 | 1 | Test Subject #2 |
| | | |
| 3 | 1 | Test Subject #3 |
| | | |
| 4 | 2 | Test Subject #4 |
| | | |
| 5 | 3 | Test Subject #5 |
| | | |
| 6 | 3 | Test Subject #6 |
| | | |
| 7 | 3 | Test Subject #7 |
| | | |
| 8 | 4 | Test Subject #8 |
| | | |
| 9 | 5 | Test Subject #9 |
| | | |
| 10 | 6 | Test Subject #10 |
| | | |
| 11 | 7 | Test Subject #11 |
| | | |
| 12 | 7 | Test Subject #12 |
| | | |
| 13 | 7 | Test Subject #13 |
+------------+--------+------------------+
目前,我有一条 SQL 语句,显示所有工作,以及两个字段中的前两个“主题”,结果如下:
+--------+------------+------------------+------------------+
| JOB_ID | JOB_NAME | SUBJECT 1 | SUBJECT 2 |
+--------+------------+------------------+------------------+
| | | | |
| 1 | Test Job 1 | Test Subject #1 | Test Subject #2 |
| | | | |
| 2 | Test Job 2 | Test Subject #4 | |
| | | | |
| 3 | Test Job 3 | Test Subject #5 | Test Subject #6 |
| | | | |
| 4 | Test Job 4 | Test Subject #8 | |
| | | | |
| 5 | Test Job 5 | Test Subject #9 | |
| | | | |
| 6 | Test Job 6 | Test Subject #10 | |
| | | | |
| 7 | Test Job 7 | Test Subject #11 | Test Subject #12 |
+--------+------------+------------------+------------------+
这是由以下 SQL 产生的:
SELECT job.job_id as 'Id',
job.job_name as 'JobName',
Subjects1.Subject as 'Subject 1',
Subjects2.Subject as 'Subject 2',
LEFT JOIN job_Subjects as Subjects1 ON Subjects1.job_id = job.job_id AND Subjects1.Subject_id = (SELECT Subject_id FROM job_Subjects WHERE job_Subjects.job_id = job.job_id ORDER BY job_Subjects.Subject_index LIMIT 1)
LEFT JOIN job_Subjects as Subjects2 ON Subjects2.job_id = job.job_id AND Subjects2.Subject_id = (SELECT Subject_id FROM job_Subjects WHERE job_Subjects.job_id = job.job_id ORDER BY job_Subjects.Subject_index LIMIT 1,1)
但是,我还需要搜索主题的名称(job_subjects.subject 字段)。
我尝试了以下方法:
- 添加了“WHERE job_subjects.subject LIKE '%Test Job 3%'” - 但是我收到以下错误:“'where 子句'中的未知列 'job_subjects.subject'”
- 添加了另一个连接“LEFT JOIN job_subjects as SearchSubjects ON SearchSubjects .job_id = job.job_id”,然后添加了“WHERE SearchSubjects.subject LIKE '%Test Job 3%'”但是我似乎得到了多个 JOB 结果(其中,它似乎会为其找到的每个主题结果生成一个作业行结果)。
如何搜索主题表,同时保持两个连接的原样?
【问题讨论】: