簡體   English   中英

MySQL連接查詢幫助顯示2條單獨的記錄

[英]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 9sc_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM