and ORM generate this SQL:
SELECT "nakhll_market_shop"."ID" FROM "nakhll_market_shop" LEFT OUTER JOIN
"nakhll_market_product" ON ("nakhll_market_shop"."ID" =
"nakhll_market_product"."FK_Shop_id") WHERE
("nakhll_market_shop"."Available" AND "nakhll_market_shop"."Publish")
GROUP BY "nakhll_market_shop"."ID", RANDOM() HAVING
COUNT("nakhll_market_product"."ID") > 1 ORDER BY RANDOM() ASC LIMIT 12
but it does not return any shop,
the correct SQL query is:
SELECT "nakhll_market_shop"."ID" FROM "nakhll_market_shop" LEFT OUTER JOIN
"nakhll_market_product" ON ("nakhll_market_shop"."ID" =
"nakhll_market_product"."FK_Shop_id") WHERE
("nakhll_market_shop"."Available" AND "nakhll_market_shop"."Publish")
GROUP BY "nakhll_market_shop"."ID" HAVING
COUNT("nakhll_market_product"."ID") > 1 ORDER BY RANDOM() ASC LIMIT 12
--
Ticket URL: <https://code.djangoproject.com/ticket/33568>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
Old description:
> This query:
> Shop.objects\
> .filter(Publish = True, Available = True)\
> .annotate(product_count = Count('ShopProduct'))\
> .filter(product_count__gt=1)\
> .order_by('?').values('ID')[:12]
>
> and ORM generate this SQL:
> SELECT "nakhll_market_shop"."ID" FROM "nakhll_market_shop" LEFT OUTER
> JOIN "nakhll_market_product" ON ("nakhll_market_shop"."ID" =
> "nakhll_market_product"."FK_Shop_id") WHERE
> ("nakhll_market_shop"."Available" AND "nakhll_market_shop"."Publish")
> GROUP BY "nakhll_market_shop"."ID", RANDOM() HAVING
> COUNT("nakhll_market_product"."ID") > 1 ORDER BY RANDOM() ASC LIMIT 12
>
> but it does not return any shop,
> the correct SQL query is:
> SELECT "nakhll_market_shop"."ID" FROM "nakhll_market_shop" LEFT OUTER
> JOIN "nakhll_market_product" ON ("nakhll_market_shop"."ID" =
> "nakhll_market_product"."FK_Shop_id") WHERE
> ("nakhll_market_shop"."Available" AND "nakhll_market_shop"."Publish")
> GROUP BY "nakhll_market_shop"."ID" HAVING
> COUNT("nakhll_market_product"."ID") > 1 ORDER BY RANDOM() ASC LIMIT 12
New description:
This query:
{{{ #!python
Shop.objects\
.filter(Publish = True, Available = True)\
.annotate(product_count = Count('ShopProduct'))\
.filter(product_count__gt=1)\
.order_by('?').values('ID')[:12]
}}}
and ORM generate this SQL:
{{{ #!sql
SELECT "nakhll_market_shop"."ID" FROM "nakhll_market_shop" LEFT OUTER JOIN
"nakhll_market_product" ON ("nakhll_market_shop"."ID" =
"nakhll_market_product"."FK_Shop_id") WHERE
("nakhll_market_shop"."Available" AND "nakhll_market_shop"."Publish")
GROUP BY "nakhll_market_shop"."ID", RANDOM() HAVING
COUNT("nakhll_market_product"."ID") > 1 ORDER BY RANDOM() ASC LIMIT 12
}}}
but it does not return any shop,
the correct SQL query is:
{{{ #!sql
SELECT "nakhll_market_shop"."ID" FROM "nakhll_market_shop" LEFT OUTER JOIN
"nakhll_market_product" ON ("nakhll_market_shop"."ID" =
"nakhll_market_product"."FK_Shop_id") WHERE
("nakhll_market_shop"."Available" AND "nakhll_market_shop"."Publish")
GROUP BY "nakhll_market_shop"."ID" HAVING
COUNT("nakhll_market_product"."ID") > 1 ORDER BY RANDOM() ASC LIMIT 12
}}}
--
--
Ticket URL: <https://code.djangoproject.com/ticket/33568#comment:1>
* status: new => closed
* resolution: => duplicate
Comment:
Duplicate of #26390, fixed in 509d9da26fb92a8d566ec105ff40bb024803ceaa.
--
Ticket URL: <https://code.djangoproject.com/ticket/33568#comment:2>