php - 限制加入 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
解决方案
那是因为那是无效的语法。如果要限制从联接表比较的行,则需要用这些表上的子查询替换这些表。
对你想要的结果做一些假设,一个简单的例子就是替换
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;因为这样可以避免代价高昂的关联。
推荐阅读
- apache-flink - Flink 翻滚窗口标注
- python - python中循环链表中的出队
- java - 使用自己的数据库配置 Spring Cloud 数据流任务
- android - React Native - Android 模拟器的文本转换问题
- java - 在物理 SD 卡上创建新目录的简单代码
- typescript - 从数组中返回类型的联合
- php - 如何从 Wordpress 解析 XML 文件以在另一个 CMS 中使用?
- python - if条件python pandas的索引计数器
- javascript - 使用数组内的值查找对象键?
- oracle - 使用连接更新 Oracle 中的语句