我正在尝试进行一些查询,首先,我做了一个(并且可行):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/