2015-09-02 165 views
-2

我喜歡寫下列類似的查詢,其中列xX_role的行數多於1.如何執行此操作。下面是我想要做的類似的事情。我正在嘗試過濾具有相似列值的數據。在查詢中使用「group by」和「having」

Select 
    scrs.requestid, 
    scr_remedy, 
    type, 
    workstream, 
    system, 
    status, 
    scrs.release, 
    assigned_to, 
    `role`, 
    LEFT(role, 7) as 'xx_role', 
    MID(role, 5,3) as 'roleid' 
from 
    scrs, 
    tblscr_role 
GROUP BY 'xx_role' 
HAVING 
    (scrs.requestid = tblscr_role.requestid) 
    and (scrs.release = 'GROUP6' OR scrs.release = 'ER_JUNE15' OR scrs.release = 'ER_APR_15') 
    and Count('xx_role') > 1 
+0

在最簡單的層面上,這是一個引用的問題。從'xx_role'中刪除單引號會產生一些影響,但可能不會返回所需的結果。我注意到這兩個表之間沒有加入條件,或者存在於HAVING中,但它屬於WHERE。無論如何,在引號中使用''xx_role''會導致MySQL將其解釋爲文本字符串而不是別名/標識符。 –

+0

爲了讓我們自信地回答一個正在運行的查詢,它有助於將輸入行樣本與希望從查詢中獲得的輸出行樣本一起使用。 –

回答

2

除了@MichaelBerkowski提到的內容,您很可能會濫用臭名昭着的MySQL擴展到GROUP BY。讀這個。

http://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html

您還可以在from scrs, tblsc_role混雜一起。在HAVING子句中加入條件不會做你認爲他們會做的事。

Select 
    scrs.requestid, 
    scr_remedy, 
    type, 
    workstream, 
    system, 
    status, 
    scrs.release, 
    assigned_to, 
    `role`, 
    LEFT(role, 7) as xx_role, 
    MID(role, 5,3) as roleid 
from scrs 
join tblscr_role ON scrs.requestid = tblscr_role.requestid 
where ( scrs.release = 'GROUP6' 
     OR scrs.release = 'ER_JUNE15' 
     OR scrs.release = 'ER_APR_15') 

一旦您從該查詢中獲得所需的詳細結果,就可以繼續並添加GROUP BY/HAVING子句。但嘗試使用標準的GROUP BY。