首先,这是给我的一个数据库,使用它是一件痛苦的事情。
我有这张table:
| 内容标识符|版本|内容版本ID|别名|发布日期|内容属性名称|内容属性值|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 小行星4507|四个|小行星10369|/实际情况/arkiv/|2014年4月4日|类别名称|1类、2类|
| 小行星4348|三个|小行星10373|/出版商/|二〇一一年五月二十三日|类别名称|1类、2类|
| 小行星4348|四个|小行星|/出版商/|二〇一一年五月二十三日|类别名称|1类、2类|
| 小行星4439|三个|小行星10701|/出版商/|2015年4月8日|类别名称|1类、2类|
| 小行星4439|四个|小行星10702|/出版商/|2015年4月8日|类别名称|1类、2类|
我正在尝试去除列"content_id"中的重复项,并且我已经在stackoverflow上搜索了答案,但是我无法让它与我的SQL查询一起工作。
有人能帮助我完成当前查询吗?
SELECT db_name.contentversion.ContentId as 'content_id',
db_name.contentversion.Version as 'version',
db_name.contentversion.ContentVersionId as 'content_version_id',
db_name.content.alias as 'alias',
db_name.content.PublishDate as 'publish_date',
db_name.contentattributes.Name as 'contentattribute_name',
db_name.contentattributes.Value as 'contentattribute_value'
FROM db_name.contentversion
JOIN db_name.content
ON db_name.content.ContentId = db_name.contentversion.ContentId
JOIN db_name.contentattributes
ON db_name.contentattributes.ContentVersionId = db_name.contentversion.ContentVersionId
编辑
我想我可以使用以下查询来解决这个问题:
SELECT cv.ContentId, cv.Version, cv.ContentVersionId,
db_name.content.alias AS "alias",
db_name.content.PublishDate AS "publish_date",
db_name.contentattributes.Name AS "contentattribute_name",
db_name.contentattributes.Value AS "contentattribute_value"
FROM contentversion cv
INNER JOIN (
SELECT ContentId, MAX(Version) Version
FROM contentversion
GROUP BY ContentId
) b ON cv.ContentId = b.ContentId AND cv.Version = b.Version
JOIN db_name.content
ON db_name.content.ContentId = cv.ContentId
JOIN db_name.contentattributes
ON db_name.contentattributes.ContentVersionId = cv.ContentVersionId
4条答案
按热度按时间jw5wzhpr1#
content_id似乎不是主键,它可以保存在两个不同的版本(即3或4)中。您可能希望获取感兴趣的版本,以便使用
WHERE version= ?
进行筛选,或者如果版本类型无关紧要,则只使用distinct content_id
t3psigkw2#
您需要每个内容ID的最大版本。最好的方法可能是横向连接,从MySQL 8.0.14开始就可以使用。
6fe3ivhb3#
最后一个对我有效的查询是(感谢Thorsten Kettner):
inn6fuwd4#
必须从查询中省略version和content_version_id列,因为相同的content_id具有不同的值。然后,使用group by子句删除重复的列,如下所示。