Я выполняю рефакторинг и переформатирую длинный запрос, и я заметил шаблон для JOIN, который, кажется, не имеет смысла. В коде, над которым я работаю, многие из JOIN следуют тому же шаблону, что и JOIN, включающий таблицу customers_to_accounts
в приведенном ниже примере:
SELECT
customers.name,
accounts.balance
FROM customers
INNER JOIN (
SELECT
customer_id,
account_id
FROM customers_to_accounts
) AS x ON x.customer_id = customers.customer_id
INNER JOIN accounts ON accounts.account_id = x.account_id
Я действительно не понимаю, почему код не было написано как:
SELECT
customers.name,
accounts.balance
FROM customers
INNER JOIN customers_to_accounts ON customers_to_accounts.customer_id = customers.customer_id
INNER JOIN accounts ON accounts.account_id = customers_to_accounts.account_id
Добавление производной таблицы приводит к тому, что на первый взгляд код делает что-то намного более сложное, чем на самом деле. Единственное преимущество, о котором я могу подумать, - это некоторый прирост производительности, но я думаю, что создание производной таблицы будет вредным для производительности, если что-нибудь. Если бы целью было присвоить таблице более короткий псевдоним, чем customers_to_accounts
, вы, конечно, могли бы сделать это без создания производной таблицы.
Я не знаю, был ли код написан от руки или это было как-то сгенерировано - это то, что любят делать многие библиотеки ORM? Какие еще причины могут быть для этого?