Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 修改联接以按外部表中的ID列表筛选结果_Mysql_Join - Fatal编程技术网

Mysql 修改联接以按外部表中的ID列表筛选结果

Mysql 修改联接以按外部表中的ID列表筛选结果,mysql,join,Mysql,Join,以下是我的数据库结构: 我使用的SQL语句是: SELECT t1.Name AS Teacher_Name, t2.Name AS Observer_Name, o.Datetime AS Datetime, o.Type AS Type, o.Year_Group AS Year_Group, o.Class_Name AS Class_Name, c.Title AS Course_Name, GROUP_C

以下是我的数据库结构:

我使用的SQL语句是:

SELECT
     t1.Name AS Teacher_Name,
     t2.Name AS Observer_Name,
     o.Datetime AS Datetime,
     o.Type AS Type,
     o.Year_Group AS Year_Group,
     o.Class_Name AS Class_Name,
     c.Title AS Course_Name,
     GROUP_CONCAT(DISTINCT l.Title SEPARATOR ', ') AS Focus,
     o.Achievement_Grade AS Achievement_Grade,
     o.Behaviour_Grade AS Behaviour_Grade,
     o.Teaching_Grade AS Teaching_Grade,
     GROUP_CONCAT(DISTINCT cl1.Title SEPARATOR ', ') AS Positive,
     GROUP_CONCAT(DISTINCT cl2.title SEPARATOR ', ') AS Development,
     o.Notes AS Notes
FROM observations o
LEFT JOIN teachers t1 
    ON o.Teacher_ID = t1.Teacher_ID
LEFT JOIN teachers t2 
    ON o.Observer_ID = t2.Teacher_ID
LEFT JOIN courses c 
    ON o.Course_ID = c.Course_ID
LEFT JOIN  foci f
    ON o.ID = f.Observation_ID
LEFT JOIN focus_labels l
    on f.focus_id = l.id
LEFT JOIN  criteria c1
    ON o.ID = c1.Observation_ID
LEFT JOIN criteria_labels cl1
    on c1.Criteria_ID = cl1.ID AND c1.Type = 'P'
LEFT JOIN  criteria c2
    ON o.ID = c2.Observation_ID AND c2.Type = 'D'
LEFT JOIN criteria_labels cl2
    on c2.Criteria_ID = cl2.ID
GROUP BY o.id
ORDER BY Datetime DESC
从这样的结果集返回的数据是:


我现在要做的是按课程进行搜索

我的输入是一个ID列表,所以我希望我可以使用如下内容:

从课程ID位于(1、2、3、4)中的课程中选择*

显然,这并不是那么简单,因为我的
课程
正在加入:

在o.Course\u ID=c.Course\u ID上左连接课程c

我将如何修改此声明以包含此类搜索功能


提前谢谢,

为什么不呢?只需将以下内容添加到您的查询
where
语句中:

.............................
LEFT JOIN criteria_labels cl2
    on c2.Criteria_ID = cl2.ID
WHERE o.Course_ID IN (1, 2, 3, 4)
GROUP BY o.id
ORDER BY Datetime DESC

谢谢你的盛情款待。我刚刚尝试过,它似乎返回了所有行?我已经更新了我的原始帖子,加入了我在看到你的答案后尝试使用的SQL。DOH忽略这一点,我使用的是
,而不是
WHERE
。现在开始工作,谢谢valex!您应该将where添加到主表中,而不是添加到联接条件中。这些方法有不同的含义。尝试添加WHERE-before组,在这种情况下,您需要严格控制整个行集。若你们添加条件来连接你们,只需严格连接表而不是整个行集。是的,你们也发现了这一点。再次感谢。