MySQL — SQL 语法错误(WHERE IN UNION)
Posted
技术标签:
【中文标题】MySQL — SQL 语法错误(WHERE IN UNION)【英文标题】:MySQL — Error in your SQL syntax (WHERE IN UNION) 【发布时间】:2011-01-14 19:51:36 【问题描述】:SELECT *
FROM `SC_products`
WHERE `productID`
IN (
(
SELECT `productID`
FROM `SC_product_options_set`
LEFT JOIN `SC_products_opt_val_variants` ON `SC_product_options_set`.`variantID` = `SC_products_opt_val_variants`.`variantID`
WHERE `SC_products_opt_val_variants`.`optionID` = '14'
GROUP BY `SC_product_options_set`.`productID`
ORDER BY `SC_products_opt_val_variants`.`sort_order` ASC
)
UNION ALL
(
SELECT `productID`
FROM `SC_product_options_values`
WHERE `SC_product_options_values`.`optionID` = '14'
ORDER BY `SC_product_options_values`.`option_value_ru` ASC
)
)
GROUP BY `SC_products`.`productID`
LIMIT 0 , 30
ERROR №1064 - 您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 7 行的 'UNION ALL ( SELECT productID
FROM SC_product_options_values
WHERE `SC_produ' 附近使用正确的语法
请帮忙。
【问题讨论】:
【参考方案1】:试试这个:
SELECT *
FROM `sc_products`
WHERE `productid` IN (
SELECT `productid`
FROM `sc_product_options_set`
LEFT JOIN `sc_products_opt_val_variants`
ON `sc_product_options_set`.`variantid` =
`sc_products_opt_val_variants`.`variantid`
WHERE `sc_products_opt_val_variants`.`optionid` = '14'
GROUP BY `sc_product_options_set`.`productid`
UNION ALL
SELECT `productid`
FROM `sc_product_options_values`
WHERE `sc_product_options_values`.`optionid` = '14'
)
GROUP BY `sc_products`.`productid`
LIMIT 0, 30
P.S:您的子查询中不需要 ORDER BY,因为它位于 IN 子句中
【讨论】:
谢谢,Cybernate。我会试试的。【参考方案2】:IIRC,您必须将 ORDER 子句放在您正在联合的查询之外。如果这样做,则需要确保在每个待联合查询中选择这些列,以便在获得完整记录集后对它们进行排序。
之后,您需要将这些结果包装在另一个 SELECT 层中,这样您的 IN 比较才会起作用。
【讨论】:
我试试这个(在 UNION 中没有 GROUP 和 ORDER): SELECT * FROMSC_products
WHERE productID
IN ( ( SELECT productID
FROM SC_product_options_set
LEFT JOIN SC_products_opt_val_variants
ON SC_product_options_set
.variantID
= SC_products_opt_val_variants
.variantID
WHERE SC_products_opt_val_variants
.optionID
= '14' ) UNION ALL (SELECT productID
FROM SC_product_options_values
WHERE SC_product_options_values
.SC_product_options_values
.@98765433) GROUP BY SC_products
.productID
LIMIT 0 , 30 但我在同一行仍然有问题
当我尝试调试这类事情时,我通常会独立运行每个内部查询,以验证它们的语法和组合是否正确。一旦我确定了我的每个组件,那么我在将它们组合在一起时遇到的任何问题都会更容易解决。看起来@Cybernate 在这里已经涵盖了您,但是如果您将来遇到类似的问题,这种调试技术可能会在将来为您节省一些痛苦。 =)
Kyle Humfeld,我一开始尝试请求 UNION 块,没有问题。感谢您的建议。以上是关于MySQL — SQL 语法错误(WHERE IN UNION)的主要内容,如果未能解决你的问题,请参考以下文章
mysql查询语句提示Unknown column 'zp' in 'where clause',求解!
SQL WHERE NOT...IN 与 WHERE ... NOT IN
MySQL SELECT WHERE IN LIST 和 NOT IN LIST 在同一 SQL 中
mysql 的 Unknown column '6' in 'order clause' 这是啥错误啊!! 高手们帮个忙啊!!!