Неизвестная ошибка столбца при использовании двух операторов COUNT в одном запросе

0

Я пытаюсь запустить 2 разных события COUNT в одном запросе SQL, но я получаю эту ошибку:

Столбец не найден: 1054 Неизвестный столбец "po.product_id" в разделе "on"

Вот sql:

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'
  • 2
    Вы обычно GROUP BY все столбцы, которые вы выбираете, кроме тех, кто аргументы для установки функций.
Теги:

3 ответа

1
Лучший ответ

Если вы хотите присоединиться к столбцу, он должен быть возвращен SELECT. Включите product_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'

Для того, чтобы:

INNER JOIN (SELECT 'product_id', COUNT(DISTINCT 'outlet_id') AS 'outlets' FROM 'prod_outlets' GROUP BY 'product_id') as 'po' ON po.'product_id' = bbp.'prod_id'

Без выбранного столбца product_id не отображается за пределами этой промежуточной таблицы (здесь называется po). Вот почему вы получаете неизвестный столбец с ошибкой, потому что только известный столбец является outlets.

1

Включение столбца в GROUP BY недостаточно. Вы также должны включить его в SELECT:

SELECT product_id, COUNT(DISTINCT 'outlet_id') AS 'outlets'
FROM 'prod_outlets'
GROUP BY 'product_id'
0

Почему бы просто не присоединиться напрямую

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'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню