首页 > 解决方案 > 限制加入 MySQL

问题描述

在我的代码中,我无法对每个连接表进行限制,我总是看到错误:SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 4 行的“INNER JOIN products_images ON products.id=products_images.product_id LIMIT 1”附近使用正确的语法

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

标签: phpmysqlmysqlipdophpmyadmin

解决方案


那是因为那是无效的语法。如果要限制从联接表比较的行,则需要用这些表上的子查询替换这些表。

对你想要的结果做一些假设,一个简单的例子就是替换

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 通常,这样的子查询应该找到“每个人的第一个”,包括(并且经常分组)“每个”的 id,然后加入那个 id;因为这样可以避免代价高昂的关联。


推荐阅读