Сделать ограничение на присоединение к MySQL - PullRequest
0 голосов
/ 27 ноября 2018

Здесь, в моем коде, я не могу установить ограничение для каждой объединенной таблицы, я вижу всегда Ошибка: SQLSTATE [42000]: Синтаксическая ошибка или нарушение доступа: 1064 У вас есть ошибка в вашем синтаксисе SQL;обратитесь к руководству, соответствующему вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с 'INNER JOIN products_images ON products.id = products_images.product_id LIMIT 1' в строке 4

SELECT products_images.image as products_image, products_description.name as products_name, products_details.price as products_price, products.id as products_id
FROM products
INNER JOIN products_description ON products.id=products_description.product_id LIMIT 1
INNER JOIN products_images ON products.id=products_images.product_id LIMIT 1
INNER JOIN products_details ON products.id=products_details.product_id LIMIT 1

1 Ответ

0 голосов
/ 27 ноября 2018

Это потому, что это неверный синтаксис.Если вы хотите ограничить строки, сравниваемые из соединенных таблиц, вам нужно заменить эти таблицы на подзапросы этих таблиц.

Делая несколько предположений о желаемом результате, простым примером будет замена

INNER JOIN products_description ON products.id=products_description.product_id LIMIT 1

с

INNER JOIN (SELECT * FROM products_description AS d WHERE d.product_id = product.id ORDER BY d.id DESC LIMIT 1) AS pd

Я бы НЕ рекомендовал этот точный подзапрос, хотя в качестве коррелированных подзапросов (подзапрос WHERE ссылается на внешний запрос)обычно довольно неэффективно;он будет выполняться отдельно для каждой строки в products. Обычно такие подзапросы должны находить «сначала для каждого», включая (и часто группируя по) идентификатор «каждого», а затем присоединяться к этому идентификатору;поскольку это позволяет избежать дорогостоящей корреляции.

...