MySQL加入。从一个表到另一个表加入多行?

问题描述:

我有一张名为Articles的表格。我也有一张表Tags。标签表实际上具有2个独立的表格,因为它是文章和标签之间的多对多关系。例如:MySQL加入。从一个表到另一个表加入多行?

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; 

现在,是有可能做一个查询返回的文章,也都涉及到在同一个查询文章从标签表中的标签?

+0

不,它不是作业。我实际上在CodeIgniter论坛上发布了一个问题(我可以链接,如果你需要我的话)与某个项目相关,并且有人建议做一个查询。我在问,因为我不确定是否有可能。 – GV1 2011-12-24 23:35:10

+0

您通常会在table2.table1ID = table1.id内连接table3 ON table3.id = table2.table3id'中执行select * from table1内连接table2。其中'table2'是您的链接表。 – 2011-12-24 23:36:35

+0

我明白了。我需要回顾一下我的连接有没有使用它们一段时间。 – GV1 2011-12-24 23:37:02

按照意见,您通常使用JOIN语句来组合多个表中的相关记录。

注意,我认为

  • ArticlesID
  • Article_TagsArticleIDTagID
  • TagsID

如果实际列名称不同,您应该将我的声明中的相应列替换为其实际名称。关于JOIN语法

SQL连接被用于从两个或更多表中查询数据

SQL语句

SELECT * 
FROM Articles a 
     INNER JOIN Article_Tags at ON at.ArticleID = a.ID 
     INNER JOIN Tags t ON t.ID = at.TagID 

的更多信息,根据一定的列之间的 关系在这些表中

如果您想要取回单个行,则需要使用an aggregate function来组合标记。

假设article(id, title, content)tag(id, name)article_tags(连接表)有(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