2012-08-04 61 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