在我的代码中,我无法对每个联接表进行限制,我总是看到错误:sqlstate[42000]:语法错误或访问冲突:1064您的sql语法有错误;检查与您的mariadb服务器版本相对应的手册,以获得在第4行使用“inner join products\u images on products.id=products\u images.product\u 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
1条答案
按热度按时间kkih6yb81#
那是因为那是无效的语法。如果要限制与联接表比较的行,则需要将这些表替换为这些表上的子查询。
对你想要的结果做一些假设,一个简单的例子就是
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
我不建议使用这个精确的子查询,因为相关子查询(子查询引用外部查询的位置)通常效率很低;它将为中的每一行分别执行products
. 通常,这样的子查询应该找到“first for each”,包括“each”的id(并且经常分组),然后在该id上连接;因为这样可以避免代价高昂的关联。