我有以下“图像”表......
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 )
关于mysql - 通过将 Jpg 优先于 Doc,每个产品仅检索一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31932230/