2013-11-14 128 views
-1

如何將這兩個查詢合併爲1?兩者都使用2個不同的數據庫,但都在同一臺服務器上。我會在這裏使用子選擇還是聯盟?來自多個數據庫的MySQL多個查詢

我基本上都會想是這樣,顯示如下:

User name | Total A | Total B 
jon   5   3 
tim   4   2 
sarah   3   1 

這裏有疑問:

首先查詢:

SELECT 
    U.USR_USERNAME AS `User Name`, 
    COUNT(rp_workflow.PIG.APP_UID) AS 'Total A' 
FROM 
    rp_workflow.PMT_INSP_GRID PIG 
    JOIN 
    rp_workflow.PMT_INSP_NORMAL PIN 
    ON PIG.APP_UID = PIN.APP_UID 
    JOIN 
    wf_workflow.USERS U 
    ON PIN.USR_UID_ORDER = U.USR_UID 
GROUP BY 
U.USR_USERNAME 

第二個查詢:

SELECT 
    U.USR_USERNAME AS `User Name`, 
    COUNT(rp_workflow.PIQG.APP_UID) AS 'Total B' 
FROM 
    rp_workflow.PMT_INSP_QC_GRID PIQG 
    JOIN 
    rp_workflow.PMT_INSP_NORMAL PIN 
    ON PIQG.APP_UID = PIN.APP_UID 
    JOIN 
    wf_workflow.USERS U 
    ON PIN.USR_UID_QC = U.USR_UID 
    WHERE 
    PIN.APP_STATUS = 'Completed' 
GROUP BY 
U.USR_USERNAME 

編輯:嘗試了一個子選擇,但它最終只顯示第二個查詢的所有值的總和。感覺我很近,但也變得更加困惑。

SELECT 
    U.USR_USERNAME AS `User Name`, 
    COUNT(rp_workflow.PIG.APP_UID) AS 'Total A', 
    (SELECT 
    COUNT(rp_workflow.PIQG.APP_UID) 
    FROM 
     rp_workflow.PMT_INSP_QC_GRID PIQG 
    JOIN 
    rp_workflow.PMT_INSP_NORMAL PIN 
    ON PIQG.APP_UID = PIN.APP_UID 
    JOIN 
    wf_workflow.USERS U 
    ON PIN.USR_UID_QC = U.USR_UID 
    WHERE 
    PIN.APP_STATUS = 'Completed') AS 'Total B' 
FROM 
    rp_workflow.PMT_INSP_GRID PIG 
    JOIN 
    rp_workflow.PMT_INSP_NORMAL PIN 
    ON PIG.APP_UID = PIN.APP_UID 
    JOIN 
    wf_workflow.USERS U 
    ON PIN.USR_UID_ORDER = U.USR_UID 
GROUP BY 
U.USR_USERNAME 

它顯示的內容:

User name | Total A | Total B 
jon   5   6 

編輯2:*的USR_UID不存在於表豬或PIQG所以他們必須加入到表PIN。從那裏,用戶名可以檢索

嘗試這樣的查詢,但最終得到的未知列錯誤:

SELECT wf_workflow.U.USR_USERNAME AS `User Name` , 

     (SELECT count(PIG.APP_UID) 
     FROM rp_workflow.PMT_INSP_GRID PIG 
     JOIN rp_workflow.PMT_INSP_NORMAL PIN ON PIG.APP_UID = PIN.APP_UID 
     AND PIN.USR_UID_ORDER = U.USR_UID) AS 'Total A', 

     (SELECT count(PIQG.APP_UID) 
     FROM rp_workflow.PMT_INSP_QC_GRID PIQG 
     JOIN rp_workflow.PMT_INSP_NORMAL PIN2 ON PIQG.APP_UID = PIN2.APP_UID 
     AND PIN2.USR_UID_ORDER = wf_workflow.U.USR_UID 
     WHERE PIN2.APP_STATUS = 'Completed') AS 'Total B' 
    FROM wf_workflow.USERS U 
+0

嘗試把數據庫名一樣,這個表名之前。 - '[Db Name]。[Table Name]' –

+0

@MikeBrant我嘗試了一個子選擇,但它只顯示第二個查詢的所有值的總和。看我的第一篇文章 – justWired

回答

0

嘗試

SELECT username, 
     SUM(CASE WHEN source = 1 THEN total END) total_a, 
     SUM(CASE WHEN source = 2 THEN total END) total_b 
    FROM 
(
    SELECT 1 source, 
      u.usr_username username, 
      COUNT(pig.app_uid) total 
     FROM rp_workflow.pmt_insp_grid pig JOIN rp_workflow.pmt_insp_normal pin 
     ON pig.app_uid = pin.app_uid JOIN wf_workflow.users u 
     ON pin.usr_uid_order = u.usr_uid 
    GROUP BY u.usr_username 
    UNION ALL 
    SELECT 2 source, 
      u.usr_username username, 
      COUNT(piqg.app_uid) total 
     FROM rp_workflow.pmt_insp_qc_grid piqg JOIN rp_workflow.pmt_insp_normal pin 
     ON piqg.app_uid = pin.app_uid JOIN wf_workflow.users u 
     ON pin.usr_uid_qc = u.usr_uid 
     WHERE pin.app_status = 'Completed' 
    GROUP BY u.usr_username 
) q 
GROUP BY username 
+0

我用實際的數據庫名稱替換「源」?兩個單獨的數據庫是「rp_workflow」和「wf_workflow」 – justWired

+0

不,你不應該那樣做。 'source'只是一個帶有常量值的注入列的別名,我們在外部'SELECT'中使用它來進行條件聚合。 – peterm

+0

@justWired有幫助嗎?你的問題需要更多幫助嗎? – peterm