2016-12-28 50 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