UNION后使用LEFT JOIN出现SQL语法错误,请求排查修正
SQL语法错误排查与修正
错误点分析
- 子查询缺失
FROM关键字:SELECT * Product01和SELECT * Product02写法错误,数据库无法识别查询的目标表,需补充FROM关键字。 - 表连接逻辑冲突:同时混用了旧版逗号分隔表的写法与标准JOIN语法,且重复引用已定义的表别名
pr,导致语法冲突。 - 条件表达式符号使用错误:
WHERE子句中的p.purchase_status!=0"混合了错误的引号与反引号,字段条件无需多余符号包裹。 - 动态变量格式混乱:
IN (".$product_ids.")的引号转义不符合SQL语法规范,需根据变量类型调整引号使用。
修正后的SQL语句
SELECT pp.product_id, p.shop_id, p.from_shop_id, p.purchase_type, pp.product_receive_qty AS purchase_qty, pp.purchase_product_cost * pp.product_qty AS total_cost, pr.product_code FROM PurchaseProduct pp JOIN Purchase p ON pp.purchase_id = p.purchase_id LEFT JOIN (SELECT * FROM Product01 UNION SELECT * FROM Product02) AS pr ON pp.product_id = pr.product_id WHERE pp.product_id IN ('".$product_ids."') AND p.purchase_status != 0
补充说明
- 统一使用标准JOIN语法,替代逗号分隔表的旧写法,提升SQL可读性与兼容性。
- 若
$product_ids为多值集合(如1,2,3或'A','B','C'),需确保PHP端生成的字符串格式符合SQL要求,避免语法错误。 UNION默认会去重,若需保留重复数据,可替换为UNION ALL。
内容的提问来源于stack exchange,提问作者Egven
相关产品推荐
相关产品推荐

