我有下面的“图像”表...
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 )