繁体   English   中英

MySQL的加入。 将多个行从一个表连接到另一个表?

[英]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具有ArticleIDTagID
  • 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM