2010-06-15 35 views
1

此刻,我能得到我需要有兩個單獨的SELECT語句多許多到很多連接在一個MySQL查詢沒有笛卡爾乘積

SELECT 
COUNT(rl.refBiblioID) 
FROM biblioList bl 
LEFT JOIN refList rl ON bl.biblioID = rl.biblioID 
GROUP BY bl.biblioID 

SELECT 
GROUP_CONCAT(
CONCAT_WS(':', al.lastName, al.firstName) 
ORDER BY al.authorID) 
FROM biblioList bl 
LEFT JOIN biblio_author ba ON ba.biblioID = bl.biblioID 
JOIN authorList al ON al.authorID = ba.authorID 
GROUP BY bl.biblioID 

他們這樣然而

SELECT 
GROUP_CONCAT(
CONCAT_WS(':', al.lastName, al.firstName) 
ORDER BY al.authorID), 
COUNT(rl.refBiblioID) 
FROM biblioList bl 
LEFT JOIN biblio_author ba ON ba.biblioID = bl.biblioID 
JOIN authorList al ON al.authorID = ba.authorID 
LEFT JOIN refList rl ON bl.biblioID = rl.biblioID 
GROUP BY bl.biblioID 
結合的結果

會導致作者結果列具有重複的名稱。如何在不使用DISTINCT的情況下從一個SELECT語句獲得期望的結果?使用子查詢?

回答

1

如果子查詢是可以接受的,我相信你可以做這樣的事情發生這種情況:

SELECT 
    y.authors, 
    COUNT(rl.refBiblioID) 
FROM 
    (SELECT 
    bl.biblioId, 
    GROUP_CONCAT(
     CONCAT_WS(':', al.lastName, al.firstName) 
     ORDER BY al.authorID) AS authors 
    FROM biblioList bl 
    LEFT JOIN biblio_author ba ON ba.biblioID = bl.biblioID 
    JOIN authorList al ON al.authorID = ba.authorID 
    GROUP BY bl.biblioID) y 
LEFT JOIN refList rl ON (y.biblioID = rl.biblioID) 
GROUP BY y.biblioID 

另一種解決方案是添加DISTINCTGROUP_CONCAT,但是這不是你想要的?

GROUP_CONCAT(
    DISTINCT(CONCAT_WS(':', al.lastName, al.firstName) ORDER BY al.authorID)),