用于多对多映射的SQL查询

时间:2013-06-18 00:16:19

标签: mysql sql many-to-many

我有3张桌子

Entries Table 

ID    Name      Title
1     test1     hello1
2     test2     hello2
3     test3     hello3


Keywords Table
ID    Text
5     sample
6     testing
7     hello

EntryKey Table
ID     KeywordID     EntryID
1         5             1
2         6             2
3         7             3
4         6             2
5         7             1

条目和关键字有很多关系。每个条目可以有多个关键字,一个关键字可以在多个条目中

我想要的是获取条目及其相关关键字,但我不想重复列表中的条目。

我的尝试

 SELECT e.id, e.title, e.name, e.text, e.emailaddress, k.text
  FROM entries e
       LEFT JOIN keyentries ke
              ON e.id = ke.entryID
      LEFT JOIN keywords k
              ON k.id = ke.keywordID ;

但是它给了我两次输入1和2,因为它有两个关键字。 任何帮助

提前致谢

2 个答案:

答案 0 :(得分:1)

使用GROUP_CONCAT将它们全部组合在一起。

SELECT e.id, e.title, e.name, e.text, e.emailaddress, GROUP_CONCAT(k.text) keywords
FROM entries e
LEFT JOIN keyentries ke
    ON e.id = ke.entryID
LEFT JOIN keywords k
    ON k.id = ke.keywordID
GROUP BY e.id;

答案 1 :(得分:0)

你可以这样做:

SELECT e.id, e.title, e.name, e.text, e.emailaddress, k.text
FROM entries e
LEFT JOIN keyentries ke
    ON e.id = ke.entryID
LEFT JOIN keywords k
    ON k.id = ke.keywordID
GROUP BY e.id;