繁体   English   中英

多列mysql子查询

[英]mysql subquery with more than one columns

我正在尝试这样做

SELECT 
    `projects`.*,
    (SELECT 
        COUNT(`leads`.`id`),
        `pixel`.`uuid`,
        `pixel`.`project_id`
     FROM `leads` 
     LEFT JOIN `pixel` ON `leads`.`pixel` = `pixel`.`uuid`
     WHERE `projects`.`id` = `pixel`.`project_id`
     ) as leads

FROM `projects`

但是我不能,因为我的子查询选择有不止一列,但是我必须拥有它,这样我才能进行联接,无论如何? (我只需要计数)谢谢。

correlated Subquery更改为Inner Join以显示subquery所有列

SELECT projects.*,
       a.*
FROM   projects P
       INNER JOIN (SELECT Count(leads.id) Cnt_id,
                          pixel.uuid,
                          pixel.project_id
                   FROM   leads
                          LEFT JOIN pixel
                                 ON leads.pixel = pixel.uuid) A
               ON projects.id = A.project_id 

我建议您尝试避免子查询:

SELECT
  projects.*,
  IFNUL(COUNT(leads.id).0) AS Cnt_id
FROM
  projects,
  LEFT JOIN pixel ON projects.id = pixel.project_id
  LEFT JOIN leads ON leads.pixel = pixel.uuid
GROUP BY
  projects.id

我怀疑这会快很多。

这就是答案

SELECT 
    `projects`.*,
    (SELECT 
        COUNT(`pixel`.`project_id`) 
    FROM `pixel` 
    WHERE `projects`.`id` = `pixel`.`project_id`) AS `num_pixels`,
    (SELECT COUNT(`leads`.`id`) FROM `leads`
                    LEFT JOIN `pixel` ON `leads`.`pixel` = `pixel`.`uuid`
                    WHERE `projects`.`id` = `pixel`.`project_id`) AS `num_leads`
FROM `projects` 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM