mysql - MySQL 主表的所有结果和左连接的一些结果
问题描述
我有两张桌子。一个带有与文章编号相关的图像。还有一张照片上有货号的
我想要做的是列出第一个表中的所有图像(navn),它是一个特定的文章编号(art_id)和第二个表中的最多 5 个图像,其中文章编号(artid)出现在照片(fotostation)上。
我现在无法解决如何做到这一点:)
这不起作用
SELECT i.* FROM ecs_article_images AS i
LEFT JOIN
( SELECT * FROM ecs_article_images_inneholder WHERE art_id = i.art_id LIMIT 0,5 ORDER BY dato DESC) AS inn ON inn.fotostation=i.fotostation
WHERE i.art_id='MS174868' ORDER BY nr, id DESC
表:
CREATE TABLE `ecs_article_images` (
`id` int(11) NOT NULL,
`navn` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`nr` int(11) NOT NULL,
`art_id` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
`type` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
`fotostation` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`dato` datetime NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `ecs_article_images_inneholder` (
`id` int(11) NOT NULL,
`fotostation` varchar(150) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`artid` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`dato` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这些表与 fotostation 字段相关。要在“ecs_article_images_inneholder”中查找具有artid 的文件的名称,我必须在“ecs_article_images”中查找具有相同fotostation 的navn。
解决方案
您可以使用row_number()
来枚举行。我不确定这两个表是如何相关的。以下假设它在文章和照片站上:
SELECT i.*
FROM ecs_article_images i LEFT JOIN
(SELECT inn.*,
ROW_NUMBER() OVER (PARTITION BY inn.art_id, inn.fotostation ORDER BY dato DESC) as seqnum
FROM ecs_article_images_inneholder inn
WHERE LIMIT 0,5 ORDER BY dato DESC) AS inn ON
) inn
ON inn.art_id = i.art_id AND
inn.fotostation = i.fotostation AND
inn.seqnum <= 5
WHERE i.art_id = 'MS174868'
ORDER BY nr, id DESC;
关键是PARTITION BY
键需要与JOIN
键匹配。
推荐阅读
- python - 以度为单位的 Python hasrsine 公式还有很长的路要走
- javascript - 使用 Node 的“加密”模块时是否需要使用密钥派生?
- javascript - JavaScript:按常见项目字段组合项目值列表
- api - 将 LogMeIn Refresh Token Curl 转换为 Coldfusion
- java - 在 Java 对象中发送 Multipart 和 JSON 数据 - Spring Boot Rest
- python - 网上银行网页抓取
- google-cloud-platform - 有没有办法通过存储在 Google Cloud Storage 中的文本文档进行 grep?
- html - 寻找更简洁的语法来使用 css 网格重复模式的列?
- python - Python:类方法中的 *args 行为
- javascript - jQuery.val() 仅在使用 datepicker 的第二个事件上返回值