2016-12-28 54 views
0

這是我的查詢在第二級Unknown column 'a.PID' in 'where clause' 我不能在二級子查詢訪問別名錯誤而多級子查詢訪問MySQL的別名

SELECT * 
FROM personal_store_application a, personal_store_application_lang b, (

    SELECT SUM(total) total 
    FROM (

    SELECT COUNT(NPID) total 
    FROM actnews 
    WHERE `NPID` = a.PID 
    UNION ALL SELECT COUNT(NPID) total 
    FROM logistics 
    WHERE `NPID` = a.PID 
) AS s 
) AS x 
WHERE a.Sn = b.Sn 
AND b.Lang = 'zh-tw' 
AND Application != 'S' 
ORDER BY a.C_TIME DESC 

這個查詢斷裂。如何實現這一目標?查詢工作正常,如果我將a.PID更改爲靜態PID。

感謝提前:)當你執行一個子查詢最內層查詢

+0

這個連接風格是有效的在1992年棄用加入21世紀 – Strawberry

+0

後來看到http://meta.stackoverflow.com/questions/333952/why-should-我提供一個mcve爲什麼似乎對我來說是一個非常簡單的sql查詢 – Strawberry

回答

0

執行第一,你的情況SELECT COUNT(NPID) total FROM actnews WHERE NPID = a.PID UNION ALL SELECT COUNT(NPID) total FROM logistics WHERE NPID = a.PID

不知道什麼是a.因爲它是在外部查詢,因此錯誤聲明。

+0

我不這麼認爲,因爲如果在我的第一個使用'a.pid'它很好,它知道什麼是'a.PID' –

0

也許你可以使用左加入

SELECT COUNT(NPID) total 
FROM actnews 
LEFT JOIN personal_store_application ON `NPID` = personal_store_application.PID 
+0

謝謝@Jiang的答案。沒有錯誤,但它從'personal_store_application.PID'獲取第一個記錄PID,因此所有行具有相同的總數。 –

+0

這是因爲臨時表名稱的作用域,你可以去谷歌尋求更好的解決方案「用」 – Jiang

+0

做一件事添加這兩個表'personal_store_application a,personal_store_application_lang b'在'SELECT COUNT(NPID)總數 FROM actnews WHERE NPID = a.PID UNION ALL SELECT COUNT(NPID)總計 FROM logistics WHERE NPID = a.PID'肯定它應該可以工作 – toofrellik