[英]Mysql join query help to show 2 seperate records
我有這個查詢,該查詢返回status = "offering"
的課程, offered by that user
的課程courseid "3"
現在的問題是
有一個sc_c_material表,針對一個課程有2條記錄,我想針對此課程顯示2條單獨的行,其中第一行包含具有sc_course_data的第一行記錄的sc_course數據,第二行包含具有sc_course_data的第二行sc_c_material記錄的第二行
下面的查詢only return 1 record
id 9
的課程的only return 1 record
,其中id 9
在sc_c_materials
表中具有2 records
。 我想要這兩個記錄都來自sc_c_material
表
我希望我已經闡明了我的觀點,因為這有點難以解釋
SELECT c.`id`,
c.`coursecode`,
m.`title`,
a.`author_name`,
q.`quality`,
m.`comments`,
s.status,
u.id,
m.`material`
FROM sc_courses c,
sc_status s,
sc_c_materials m,
sc_authors a,
sc_quality q,
users u
WHERE c.`statusid`=s.`id`
AND c.`userid`=u.`id`
AND m.`qualityid`=q.`id`
AND m.`authorid`=a.`id`
AND c.`id`=m.`courseid`
AND s.`status`="offering"
AND c.`userid` IN (SELECT userid
FROM sc_courses
WHERE id="3"
GROUP BY userid)
首先,我將從使用ANSI SQL-92樣式查詢開始,在其中顯示聯接關系,而不是將所有聯接關系都放在where子句中。 它可以更好地顯示表X與表Y的關系(盡管您的SQL-89格式仍然有效)。 另外,您只需要在字段周圍加上tic`標記即可,因為保留字也是列名,這可能會引起問題。
底層查詢應該工作,但是,通過查看連接條件,我看到物料表已同時連接到作者表和質量表。 如果兩個表中的任何一個表都缺少/無效的ID關系,則僅返回一條記錄。 在那種情況下,我已更改為LEFT-JOIN以查看是否確實如此
SELECT
c.id,
c.coursecode,
m.`title`,
a.author_name,
q.quality,
m.comments,
s.status,
u.id,
m.material
FROM
sc_courses c
JOIN sc_status s
ON c.statusid = s.id
AND s.status= 'offering'
JOIN sc_c_materials m
ON c.id= m.courseid
LEFT JOIN sc_authors a
ON m.authorid = a.id
LEFT JOIN sc_quality q
ON m.qualityid = q.id
JOIN users u
ON c.userid = u.id
WHERE
c.userid IN (SELECT userid
FROM sc_courses
WHERE id='3'
GROUP BY userid)
LEFT-JOIN表示我希望from子句中首先列出的LEFT表中的所有內容...在這種情況下,sc_c_materials(與作者和質量有關)不建議在作者或quality表中實際找到匹配項。 因此,在那些其他表中未找到的元素期間,您嘗試從它們中提取的任何列都將返回為NULL。
由於您最初有一個隱含的INNER JOIN(所有條件直接在where子句中),因此您的查詢是在告訴引擎...我只希望找到所有片段都存在的記錄,因此它忽略了沒有該記錄的記錄匹配表中缺少鏈接的匹配項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.