![](/img/trans.png)
[英]MySQL join, return 1 row from one table and multiple rows from another table as an array or list
[英]MySQL Join. Joining multiple rows from one table to another?
我有一个名为Articles
的表。 我也有一张Tags
表。 标签表实际上有2个独立的表,因为它在文章和标签之间具有多对多关系。 例如:
CREATE TABLE Articles (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT
title VARCHAR(255),
author INT UNSIGNED NOT NULL,
body TEXT NOT NULL -- column type may not be representative
) Engine=InnoDB;
CREATE TABLE Tags (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(32)
) Engine=InnoDB;
CREATE TABLE Article_Tags (
article INT UNSIGNED NOT NULL,
tag INT UNSIGNED NOT NULL,
FOREIGN KEY (article) REFERENCES Articles (id),
FOREIGN KEY (tag) REFERENCES Tags (id)
) Engine=InnoDB;
现在,是否可以执行单个查询以返回文章,以及同一查询中“标签”表中与该文章相关的所有标签?
如果只想返回一行,则需要使用聚合函数来组合标签。
假设article
具有(id, title, content)
, tag
具有(id, name)
, article_tags
(tag_id, article_id)
表)具有(tag_id, article_id)
,那么应该这样做(显然,未经测试):
SELECT a.title,
a.content,
GROUP_CONCAT(
DISTINCT t.name
ORDER BY ASC
SEPARATOR ", "
) as tags
FROM article a
INNER JOIN article_tags at ON at.article_id = a.id
INNER JOIN tag t ON t.id = at.tag_id
GROUP BY a.id
根据注释,通常使用JOIN
语句合并来自多个表的相关记录。
请注意,我认为
Articles
有一个ID
列 Article_Tags
具有ArticleID
和TagID
列 Tags
有一个ID
列 如果实际的列名称不同,则应使用其实际名称替换我语句中的相应列。
SQL语句
SELECT *
FROM Articles a
INNER JOIN Article_Tags at ON at.ArticleID = a.ID
INNER JOIN Tags t ON t.ID = at.TagID
有关JOIN语法的更多信息
SQL连接用于根据两个或多个表中某些列之间的关系查询数据
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.