简体   繁体   中英

mysql subquery with more than one columns

I'm trying to do this

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`

But I can't since my subquery select has more than one column, but I must have it so I can make the join, anyway around this? (all I need is the count) thank you.

Change your correlated Subquery to Inner Join to show all the columns from your 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 

I recommend you try to avoid the subquery:

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

I suspect this will be a lot faster.

This is the answer

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` 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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