Mysql 在一个查询中使用两个COUNT语句时出现未知列错误
我试图在一个SQL查询中运行两次不同的计数,但出现以下错误: 未找到列:“on子句”中的1054未知列“po.product_id” 以下是sql:Mysql 在一个查询中使用两个COUNT语句时出现未知列错误,mysql,sql,Mysql,Sql,我试图在一个SQL查询中运行两次不同的计数,但出现以下错误: 未找到列:“on子句”中的1054未知列“po.product_id” 以下是sql: SELECT COUNT(*) vouchersleft, `prod_name`, `start_date`, `end_date`, `reg_price`, `sale_price`, bbp.`prod_id`, `vouch_limits`,
SELECT COUNT(*) vouchersleft, `prod_name`,
`start_date`,
`end_date`,
`reg_price`,
`sale_price`,
bbp.`prod_id`,
`vouch_limits`,
`sp_name`,
`order_id`,
`img_name`,
`outlets`
FROM `vouchers` as `v`
INNER JOIN `bb_products` as `bbp` ON bbp.`prod_id` = v.`product_id`
INNER JOIN `service_providers` as `sp` ON sp.`service_provider_id` = bbp.`provider_id`
INNER JOIN `prod_pics` as `pp` ON pp.`prod_id` = bbp.`prod_id`
INNER JOIN (SELECT COUNT(DISTINCT `outlet_id`) AS `outlets` FROM `prod_outlets` GROUP BY `product_id`) as `po` ON po.`product_id` = bbp.`prod_id`
WHERE `frontend` = :frontend
AND bbp.`featured` = :featured
AND `order_id` = :order_id
AND pp.`featured` = :featured_img
GROUP BY bbp.`prod_id`
将列包括在
分组依据中是不够的。您还需要将其包括在选择中:
SELECT product_id, COUNT(DISTINCT `outlet_id`) AS `outlets`
FROM `prod_outlets`
GROUP BY `product_id`
将列包括在分组依据中是不够的。您还需要将其包括在选择中:
SELECT product_id, COUNT(DISTINCT `outlet_id`) AS `outlets`
FROM `prod_outlets`
GROUP BY `product_id`
如果要按列联接,则必须通过SELECT
语句返回。在您选择的列列表中包括product\u id
更改:
INNER JOIN (SELECT COUNT(DISTINCT `outlet_id`) AS `outlets` FROM `prod_outlets` GROUP BY `product_id`) as `po` ON po.`product_id` = bbp.`prod_id`
致:
如果未选择列,product\u id
在此中间表(此处命名为po
)之外不可见。这就是为什么会出现一个错误未知列,因为只有已知列是outlets
,如果要通过该列加入,则必须通过SELECT
语句返回该列。在您选择的列列表中包括product\u id
更改:
INNER JOIN (SELECT COUNT(DISTINCT `outlet_id`) AS `outlets` FROM `prod_outlets` GROUP BY `product_id`) as `po` ON po.`product_id` = bbp.`prod_id`
致:
如果未选择列,product\u id
在此中间表(此处命名为po
)之外不可见。这就是为什么会出现错误未知列,因为唯一已知列是outlets
为什么不直接加入
SELECT COUNT(*) vouchersleft, `prod_name`,
`start_date`,
`end_date`,
`reg_price`,
`sale_price`,
bbp.`prod_id`,
`vouch_limits`,
`sp_name`,
`order_id`,
`img_name`,
COUNT(DISTINCT po.`outlet_id`) AS `outlets`
FROM `vouchers` as `v`
INNER JOIN `bb_products` as `bbp` ON bbp.`prod_id` = v.`product_id`
INNER JOIN `service_providers` as `sp` ON sp.`service_provider_id` = bbp.`provider_id`
INNER JOIN `prod_pics` as `pp` ON pp.`prod_id` = bbp.`prod_id`
RIGHT JOIN `prod_outlets` as `po` ON po.`product_id` = bbp.`prod_id`
WHERE `frontend` = :frontend
AND bbp.`featured` = :featured
AND `order_id` = :order_id
AND pp.`featured` = :featured_img
GROUP BY bbp.`prod_id`
为什么不直接加入
SELECT COUNT(*) vouchersleft, `prod_name`,
`start_date`,
`end_date`,
`reg_price`,
`sale_price`,
bbp.`prod_id`,
`vouch_limits`,
`sp_name`,
`order_id`,
`img_name`,
COUNT(DISTINCT po.`outlet_id`) AS `outlets`
FROM `vouchers` as `v`
INNER JOIN `bb_products` as `bbp` ON bbp.`prod_id` = v.`product_id`
INNER JOIN `service_providers` as `sp` ON sp.`service_provider_id` = bbp.`provider_id`
INNER JOIN `prod_pics` as `pp` ON pp.`prod_id` = bbp.`prod_id`
RIGHT JOIN `prod_outlets` as `po` ON po.`product_id` = bbp.`prod_id`
WHERE `frontend` = :frontend
AND bbp.`featured` = :featured
AND `order_id` = :order_id
AND pp.`featured` = :featured_img
GROUP BY bbp.`prod_id`
您通常按所选的所有列进行分组,设置函数参数的列除外。您通常按所选的所有列进行分组,设置函数参数的列除外。