首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -根据IN ()返回多行

MySQL -根据IN ()返回多行
EN

Stack Overflow用户
提问于 2012-04-25 01:47:16
回答 1查看 206关注 0票数 1

使用MySQL,我有两个表--一个有视频,另一个有产品。products表中的每一行都有一个名为productVideoOrder的列,它是以逗号分隔的videoIDs列表(与video表相关),按照用户放置的顺序排列。

如果关系在中间表中,我下面描述的内容会更容易,但对于此项目的其他函数,逗号分隔的列表是有意义的。

我正在尝试获取一个返回第一列: videoTitle,第二列: productName的表。有没有一种基于逗号分隔列表的左连接方法?我希望结果表允许重复的行,例如,如果两个产品列出视频在productVideoOrder中,这个表将有两个视频行,一个列出产品一个,其他列出产品两个。

我可以澄清任何需要的东西。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-25 01:49:35

代码语言:javascript
复制
SELECT  p.name, v.title
FROM    product p
LEFT JOIN
        video v
ON      FIND_IN_SET(v.id, p.productVideoOrder)

这不会很快。

如果您对可以分配给产品的视频数量有合理的限制,您可以尝试使用以下方法:

代码语言:javascript
复制
SELECT  p.name, v.title
FROM    product p
CROSS JOIN
        (
        SELECT  1 AS n
        UNION ALL
        SELECT  2 AS n
        UNION ALL
        SELECT  3 AS n -- add more if needed
        )
LEFT JOIN
        video v
ON      v.id = SUBSTRING_INDEX(SUBSTRING_INDEX(productVideoOrder, ',', n), ',', -1)
        AND SUBSTRING_INDEX(SUBSTRING_INDEX(productVideoOrder, ',', n), ',', -1) <> SUBSTRING_INDEX(SUBSTRING_INDEX(productVideoOrder, ',', n - 1), ',', -1)

这将使用v.id上的索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10303215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档