我正在尝试进行一些查询,首先,我做了一个(并且可行):

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 videoFROM retailer_products AS RPLEFT JOIN groups G ON RP.id=G.retailer_product_idINNER JOIN products P ON P.id=RP.product_idWHERE (RP.product_id IN (1))GROUP BY RP.id;


但是当我执行此操作时,它给了我一个空集,不同之处在于它在查询结束时在一个字段上可能有一个“ HAVING”,该字段可能是:0、1或NULL(由于使用了LEFT JOIN,我没有与表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 videoFROM retailer_products AS RPLEFT JOIN groups G ON RP.id=G.retailer_product_idINNER JOIN products P ON P.id=RP.product_idWHERE (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上处理此问题的正确方法是什么?提前致谢!

最佳答案

将值与NULL比较的正确方法是IS NULL。因此,您需要添加HAVING G.active IS NULL OR G.active=1。您的代码G.active=NULL始终为NULL(false):

1 = NULL // NULL - false in conditions
NULL = NULL // NULL - false in conditions
NULL IS NULL // TRUE

关于mysql - 在MySQL上使用左表的字段尝试通过左连接和分组进行查询时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6005236/

10-16 07:25