Проблемы при попытке сделать запрос, используя левое объединение и группирование с наличием над полем левой таблицы в MySQL - PullRequest
1 голос
/ 15 мая 2011

Я пытаюсь сделать несколько запросов, во-первых, я делаю это (и работает):

SELECT RP.id, RP.product_name, RP.price, RP.retailer_id, RP.product_id, 
count(G.id) AS duration, G.active, RP.retprod_id, P.pr_id AS video 
FROM retailer_products AS RP 
LEFT JOIN groups G ON RP.id=G.retailer_product_id 
INNER JOIN products P ON P.id=RP.product_id 
WHERE (RP.product_id IN (1)) 
GROUP BY RP.id;

Но когда я делаю это, он дает мне пустой набор, разница в том, что он имеет «HAVING» в конце запроса над полем, которое может быть: 0, 1 или NULL (из-за LEFT ПРИСОЕДИНЯЙТЕСЬ, у меня нет групп, связанных с таблицей retailer_product)

SELECT RP.id, RP.product_name, RP.price, RP.retailer_id, RP.product_id, 
count(G.id) AS duration, G.active, RP.retprod_id, P.pr_id AS video 
FROM retailer_products AS RP 
LEFT JOIN groups G ON RP.id=G.retailer_product_id 
INNER JOIN products P ON P.id=RP.product_id 
WHERE (RP.product_id IN (1)) 
GROUP BY RP.id HAVING G.active=1;

Итак, я попробовал следующие способы, но никто не работает:

-- HAVING G.active=1

-- HAVING G.active=1 OR G.active=NULL

-- HAVING G.active0

Как правильно справиться с этим на MySQL? Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 15 мая 2011

Почему вы не добавляете условие HAVING в условие «Group» ON?

SELECT RP.id, RP.product_name, RP.price, RP.retailer_id, RP.product_id, 
count(G.id) AS duration, G.active, RP.retprod_id, P.pr_id AS video 
FROM retailer_products AS RP 
LEFT JOIN groups G ON RP.id=G.retailer_product_id AND G.active=1
INNER JOIN products P ON P.id=RP.product_id 
WHERE (RP.product_id IN (1)) 
GROUP BY RP.id;
0 голосов
/ 15 мая 2011

Правильный способ сравнить значение с NULL - IS NULL.Так что вам нужно добавить HAVING G.active IS NULL OR G.active=1.Ваш код G.active=NULL всегда NULL (ложь):

1 = NULL // NULL - false in conditions
NULL = NULL // NULL - false in conditions
NULL IS NULL // TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...