2012-08-04 55 views
0

我有两个关系表,coredomains。它们都与core.iddomains.cid有关。我想要形成一个查询,它可以返回core表中的一行,其中domains表中的所有相关行都会返回。目前,我运行了两个查询;一个从core表中获取所需的单行,另一个从domains表中获取所有相关行,但我试图优化我的查询。如何从两个没有1:1关系的关系表中获取数据? - MySQL

我想是这样的:

SELECT a.domain,b.* FROM domains a WHERE a.cid=1 INNER JOIN core b ON a.cid=b.id 

现在这工作正常,但它返回多行所有冗余数据。例如,如果core中的一行在domains中有5个相关行,则返回5行,并且b.*在每个结果中显然是相同的。有没有办法返回一行,所有a.domain返回单行?

+0

您将不得不创建一个SQLFIDDLE示例,因为您需要(PIVOT-table数据)不是非常直观和容易。 – Samson 2012-08-04 16:52:20

回答

2
SELECT 
    GROUP_CONCAT(d.domain) AS domains, 
    c.* 
FROM core c 
JOIN domains d 
    ON d.cid = c.id 
WHERE c.id = 1 
GROUP BY c.id 
+0

请您补充一点关于'GROUP_CONCAT'使用的评论吗? – 2012-08-04 16:56:11

+0

@JeremySmyth它将指定字段中的所有值连接成一个字符串(每个组)。这里的文档:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat – 2012-08-04 16:58:00

+0

你可以解释'JOIN'与'GROUP_CONCAT'的用法吗?为什么不'INNER JOIN'? – 2012-08-04 17:06:22