mysql - 如何在 MySQL 中表示交叉应用和拆分字符串

标签 mysql string tsql split

对于某些背景,我正在尝试创建一个包含多个食谱的数据库。但是,有必要将各个成分与其最初来源的配方相关联。

例如,我有一个包含所有单独成分的表格。

enter image description here

还有一个存储食谱的表格,减去了配料。

enter image description here

现在,我找到了 this介绍如何使用 T-SQL XML 命令拆分字符串的文章以及用于执行此操作的代码是:

SELECT
  Books.BookId,
  Books.Book,
  BookAuthors.AuthorId,
  BookAuthors.Author
FROM Books
CROSS APPLY dbo.split(Books.Authors,',') split
INNER JOIN BookAuthors ON BookAuthors.AuthorId = split.val

我正在寻找的结果与此非常相似: enter image description here

但是,CROSS APPLY 等仅适用于 MS SQL Server,我的问题是:

是否可以使用 MySQL 实现相同或非常相似的效果?

感谢您的帮助。

最佳答案

这应该与您想要获得的完全匹配:

SELECT
  Books.BookId,
  Books.Book,
  BookAuthors.AuthorId,
  BookAuthors.Author
FROM Books
  LEFT JOIN BookAuthors ON (find_in_set(BookAuthors.AuthorId, Books.Authors) <> 0)

发现这篇文章很有帮助:MySQL query finding values in a comma separated string

如果您需要进一步解释其工作原理,请发表评论。

关于mysql - 如何在 MySQL 中表示交叉应用和拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14591779/

相关文章:

PHP - 循环管理复选框

php - Wordpress - wp-query 按 PHP/MySQL 查询数组中的自定义字段列出帖子

c++ - 在系统函数中输入一个字符串

MySQL - 条件查询,语句结果

mysql - 想要选择每个月每日值的平均值

python - 如何在python中的字符串中插入变量值

java - 将字符串 append 到 native Java 数组

tsql - 使用 FOR XML 进行行连接,但具有多列?

sql - 随着时间的推移对重复条目进行不同计数

sql - 表作为 SQL 中 Exec 查询的表值函数的参数