﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
33759	Using subquery to filter a model delete creates sub-optimal SQL	Christofer Bertonha		"Taking in consideration the app of tutorial for demonstrate the issue.
using postgresql as db.

Executing this following code:

{{{
subquery = Comment.objects.filter(created_at__lt=datetime(2022, 6, 1))[:1000]
Comment.objects..filter(id__in=subquery).delete()
}}}

Generates the following SQL:

{{{
DELETE FROM ""comment"" WHERE ""comment"".""id"" IN (SELECT V0.""id"" FROM ""comment"" V0 WHERE V0.""id"" IN (SELECT U0.""id"" FROM ""comment"" U0 WHERE U0.""created_at"" < \'2022-06-01T00:00:00+00:00\'::timestamptz LIMIT 1000))
}}}

The inner **select V0** is completely unnecessary

If a simple select with the same subquery is executed. It generates expected SQL query.

{{{
subquery = Comment.objects.filter(created_at__lt=datetime(2022, 6, 1))[:1000]
comments = list( Comment.objects..filter(id__in=subquery) )
}}}

{{{
SELECT * FROM ""comment"" WHERE ""comment"".""id"" IN (SELECT U0.""id"" FROM ""comment"" U0 WHERE U0.""created_at"" < '2022-06-01T00:00:00+00:00'::timestamptz LIMIT 1000),
}}}
"	Bug	new	Database layer (models, ORM)	4.0	Normal				Unreviewed	0	0	0	0	0	0
