3

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

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

在此处输入图像描述

还有一张储存食谱的桌子,减去配料。

在此处输入图像描述

现在,我发现这篇文章介绍了如何使用 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

我正在寻找的结果将与此非常相似: 在此处输入图像描述

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

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

谢谢你的帮助。

4

1 回答 1

7

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

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

发现这篇文章很有帮助:MySQL 查询查找逗号分隔字符串中的值

如果您需要进一步解释它是如何工作的,请发表评论。

于 2013-01-30T12:30:51.323 回答