2017-06-19 124 views
-1

我的下一个SQL查询:MySQL的SELECT查询与另一SELECT

SELECT CONCAT(v.p_sery, v.p_id) AS sery, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 1) AS delivery_count, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 2) AS ND1, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 3) AS ND2, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 4) AS ND3, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 5) AS ND4, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 6) AS ND5, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 7) AS ND6, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 8) AS ND7 
FROM (
    SELECT p_sery, p_id, d.p_delivery_result 
    FROM registries AS a, registry_regulations r, delivery d 
    WHERE a.p_id = r.registry_id AND d.p_id = r.regulation_id AND (SELECT 
    STR_TO_DATE(a.p_date_created, '%Y-%m-%d') BETWEEN '2017-04-01' AND '2017-06-01') 
) as v;  

但这不工作。
错误:Table v doesn't exist 我做错了什么?

我有这个表:
enter image description here

而且我希望得到的地位一表交付计数

+1

请包括示例数据,并告诉我们你在这里要做什么。 –

+0

您是否也可以包含一些预期结果的样本数据? –

回答

0

无法访问从相关子查询的上下文中派生表。试试这个查询,而不是:

SELECT CONCAT(v.p_sery, v.p_id) AS sery, 
     COUNT(CASE WHEN p_delivery_result = 1 THEN 1 END) AS delivery_count, 
     COUNT(CASE WHEN p_delivery_result = 2 THEN 1 END) AS ND1, 
     COUNT(CASE WHEN p_delivery_result = 3 THEN 1 END) AS ND2, 
     COUNT(CASE WHEN p_delivery_result = 4 THEN 1 END) AS ND3, 
     COUNT(CASE WHEN p_delivery_result = 5 THEN 1 END) AS ND4, 
     COUNT(CASE WHEN p_delivery_result = 6 THEN 1 END) AS ND5, 
     COUNT(CASE WHEN p_delivery_result = 7 THEN 1 END) AS ND6, 
     COUNT(CASE WHEN p_delivery_result = 8 THEN 1 END) AS ND7 
FROM (
    SELECT p_sery, p_id, d.p_delivery_result 
    FROM registries AS a 
    JOIN registry_regulations r ON a.p_id = r.registry_id 
    JOIN delivery d d.p_id = r.regulation_id 
    WHERE STR_TO_DATE(a.p_date_created, '%Y-%m-%d') 
      BETWEEN '2017-04-01' AND '2017-06-01') as v; 

注:始终采用现代,明确JOIN语法,而不是老式的,语法。

+0

谢谢你,你帮了我! –

0

v之前只是删除作为

FROM (
    SELECT p_sery, p_id, d.p_delivery_result 
    FROM registries AS a, registry_regulations r, delivery d 
    WHERE a.p_id = r.registry_id AND d.p_id = r.regulation_id AND (SELECT 
    STR_TO_DATE(a.p_date_created, '%Y-%m-%d') BETWEEN '2017-04-01' AND '2017-06-01') 
    ) v 
+0

如果我删除,因为没有改变我有同样的错误。 '表v不存在' –

+0

你正在使用哪个db? – Manihtraa

+0

@Giorgos Betsos你的查询是工作,但在结果一行,我需要的p_date_created日期 –