What it should be (I believe): SELECT `files_version`.`id` , `files_version`.`file_id` , `files_version`.`md5` , `files_version`.`name` , `files_version`.`post_date` , `files_version`.`archive` , `files_version`.`change_log` , `files_version`.`author_id` , `files_version`.`downloads` , `files_version`.`type_id` , `files_file`.`id` , `files_file`.`category_id` , `files_file`.`name` , `files_file`.`author_id` , `files_file`.`website` , `files_file`.`visible` , `files_file`.`post_date` , `files_file`.`last_post_date` , `files_file`.`parent_id` , `files_file`.`parent_type_id` , `files_file`.`parent_visible` , `files_file`.`downloads_total` , `files_file`.`downloads_today` , `files_file`.`downloads_month` , `files_file`.`default_image` , `files_file`.`default_file` , `files_file`.`game_id` , `files_file`.`images` , `files_file`.`ratings_score` , `files_file`.`ratings_votes` , `files_file`.`labels` , `files_file`.`comments_total` , `files_file`.`allow_patches` , `files_file`.`allow_plugins` , `files_file`.`favorites` , `files_file`.`last_update` , `files_type`.`id` , `files_type`.`name` , `files_type`.`description` , `files_type`.`order` FROM `files_version` INNER JOIN `files_file` ON `files_version`.`file_id` = `files_file`.`id` , `files_type` WHERE ( ( `files_file`.`game_id` =1 OR `files_file`.`game_id` =40 ) ) AND `files_version`.`file_id` = `files_file`.`id` AND `files_version`.`type_id` = `files_type`.`id` ORDER BY `files_version`.`post_date` DESC LIMIT 100
What Django did: SELECT `files_version`.`id` , `files_version`.`file_id` , `files_version`.`md5` , `files_version`.`name` , `files_version`.`post_date` , `files_version`.`archive` , `files_version`.`change_log` , `files_version`.`author_id` , `files_version`.`downloads` , `files_version`.`type_id` , `files_file`.`id` , `files_file`.`category_id` , `files_file`.`name` , `files_file`.`author_id` , `files_file`.`website` , `files_file`.`visible` , `files_file`.`post_date` , `files_file`.`last_post_date` , `files_file`.`parent_id` , `files_file`.`parent_type_id` , `files_file`.`parent_visible` , `files_file`.`downloads_total` , `files_file`.`downloads_today` , `files_file`.`downloads_month` , `files_file`.`default_image` , `files_file`.`default_file` , `files_file`.`game_id` , `files_file`.`images` , `files_file`.`ratings_score` , `files_file`.`ratings_votes` , `files_file`.`labels` , `files_file`.`comments_total` , `files_file`.`allow_patches` , `files_file`.`allow_plugins` , `files_file`.`favorites` , `files_file`.`last_update` , `files_type`.`id` , `files_type`.`name` , `files_type`.`description` , `files_type`.`order` FROM `files_version` INNER JOIN `files_file` AS `files_version__file` ON `files_version`.`file_id` = `files_version__file`.`id` , `files_file` , `files_type` WHERE ( ( `files_version__file`.`game_id` =1 OR `files_version__file`.`game_id` =40 ) ) AND `files_version`.`file_id` = `files_file`.`id` AND `files_version`.`type_id` = `files_type`.`id` ORDER BY `files_version`.`post_date` DESC LIMIT 100 Why does Django join "files_file" twice? I do a .filter(file__game=blah).select_related(fields=['file', 'type']) so it joins the files table twice? This would happen the same with a normal .select_related() as well. Maybe the SQL engine optimizes this but I'm not sure. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---