我有下面的“图像”表...

Id  Idu idA Doc_pic Doc_cont    Doc_name    Doc_type
1   1   1   yes     no          a.jpg       jpg
1   1   1   no      yes         b_doc.jpg   Doc
3   1   2   yes     no          c.jpg       Jpg
4   1   2   no      yes         D_doc.jpg   Doc
5   1   3   yes     no          e.jpg       Jpg
6   1   3   yes     no          f.jpg       Jpg
7   1   3   no      yes         G_doc.jpg   Doc
8   2   5   no      yes         F_doc.jpg   Doc
9   3   6   yes     no          h.jpg       Jpg
10  3   8   yes     no          j.jpg       Jpg
11  4   4   no      yes         K_doc.jpg   Doc
12  4   4   no      yes         L_doc.jpg   Doc
13  4   4   yes     no          m.jpg       Jpg
14  4   9   yes     no          n.jpg       Jpg


如您所见,我有三个标识符,id,idu和ida

id-是表格图片的主要ID。
idu-是放置图像的用户。
ida-是另一个表的产品ID,此表和文档链接到该表。

如何为每个产品仅显示Doc_type = jpg和仅显示一个(如果无法使用,如id = 8),则显示该文档。

查询后我想要的输出应该是...

1   1   1   yes no  a.jpg   jpg
3   1   2   yes no  c.jpg   Jpg
5   1   3   yes no  e.jpg   Jpg
8   2   5   no  yes F_doc.jpg   Doc
9   3   6   yes no  h.jpg   Jpg
10  3   8   yes no  j.jpg   Jpg
13  4   4   yes no  m.jpg   Jpg
14  4   9   yes no  n.jpg   Jpg


我已经尝试了mysql select,distinct,group by和我使用过的更多子句中的所有可能方法,但运气不好,可能会有一些帮助...

提前致谢。

最佳答案

实现它的一种方法:

SELECT
    image.*
FROM
    ( SELECT DISTINCT idA FROM image ) idA_list

    LEFT OUTER JOIN
        (
            SELECT
                Id ,idA
            FROM
                image
            WHERE
                Doc_type = 'jpg'
            GROUP BY idA
        )
        jpg_images ON jpg_images.idA = idA_list.idA

    LEFT OUTER JOIN
        (
            SELECT
                Id ,idA
            FROM
                image
            WHERE
                Doc_type = 'doc'
            GROUP BY idA
        )
        doc_images ON doc_images.idA = idA_list.idA

    LEFT OUTER JOIN
        image ON image.id = COALESCE( jpg_images.id ,doc_images.id )

08-17 00:36
查看更多