Mysql 对并集和限制的错误使用
我有一个庞大的SQL语句,升级到MySQL 5.7后出现以下错误: 对并集和限制的错误使用 这是初始查询:Mysql 对并集和限制的错误使用,mysql,sql,union,Mysql,Sql,Union,我有一个庞大的SQL语句,升级到MySQL 5.7后出现以下错误: 对并集和限制的错误使用 这是初始查询: SELECT tx_wbfincas_domain_model_finca.*, helper.* FROM tx_wbfincas_domain_model_finca LEFT JOIN tx_wbfincas_domain_model_finca_searchhelper AS helper ON tx_wbfincas_domain
SELECT tx_wbfincas_domain_model_finca.*,
helper.*
FROM tx_wbfincas_domain_model_finca
LEFT JOIN tx_wbfincas_domain_model_finca_searchhelper AS helper
ON tx_wbfincas_domain_model_finca.uid = helper.finca_uid
WHERE hidden=0
AND deleted=0
AND helper.persons =
(
SELECT IF(Min(shelper.persons) IS NULL, 1000, Min(shelper.persons)) as tb1
FROM tx_wbfincas_domain_model_finca_searchhelper AS shelper
WHERE shelper.finca_uid = tx_wbfincas_domain_model_finca.uid limit 1
UNION
(
SELECT max(shelper.persons) AS tb1
FROM tx_wbfincas_domain_model_finca_searchhelper AS shelper
WHERE shelper.finca_uid = tx_wbfincas_domain_model_finca.uid limit 1 )
ORDER BY tb1 ASC limit 1)
AND uid IN
(
SELECT uid_local
FROM tx_wbfincas_finca_category_mm
WHERE uid_foreign=4)
GROUP BY uid
ORDER BY min_price ASC ;
https://pastebin.com/H2eaNzJ6
我已经尝试插入更多括号,如下所示:
SELECT tx_wbfincas_domain_model_finca.*,
helper.*
FROM tx_wbfincas_domain_model_finca
LEFT JOIN tx_wbfincas_domain_model_finca_searchhelper AS helper
ON tx_wbfincas_domain_model_finca.uid = helper.finca_uid
WHERE hidden=0
AND deleted=0
AND helper.persons =
((SELECT IF(Min(shelper.persons) IS NULL, 1000, Min(shelper.persons)) as tb1
FROM tx_wbfincas_domain_model_finca_searchhelper AS shelper
WHERE shelper.finca_uid = tx_wbfincas_domain_model_finca.uid limit 1 )
UNION
(SELECT max(shelper.persons) as tb1
FROM tx_wbfincas_domain_model_finca_searchhelper AS shelper
WHERE shelper.finca_uid = tx_wbfincas_domain_model_finca.uid limit 1 )
ORDER BY tb1 ASC limit 1)
AND uid IN
(SELECT uid_local
FROM tx_wbfincas_finca_category_mm
WHERE uid_foreign=4)
GROUP BY uid
ORDER BY min_price ASC ;
https://pastebin.com/mctaxTNL
但我又犯了一个错误:
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在“UNION”附近使用的正确语法
我在这里做错了什么?如果您使用的是
limit
,则子查询周围需要括号。而且,UNION
不是SELECT
语法的一部分。所以你需要选择。从带有子查询的
。因此,这可能会起作用:
helper.persons = (SELECT tbl1
FROM ((SELECT IF(Min(shelper.persons) IS NULL, 1000, Min(shelper.persons)) as tb1
FROM tx_wbfincas_domain_model_finca_searchhelper shelper
WHERE shelper.finca_uid = tx_wbfincas_domain_model_finca.uid
LIMIT 1
) UNION
(SELECT max(shelper.persons) AS tb1
FROM tx_wbfincas_domain_model_finca_searchhelper shelper
WHERE shelper.finca_uid = tx_wbfincas_domain_model_finca.uid
LIMIT 1
)
) x
ORDER BY tb1 ASC
LIMIT 1
)
如果使用的是
limit
,则子查询周围需要括号。而且,UNION
不是SELECT
语法的一部分。所以你需要选择。从带有子查询的
。因此,这可能会起作用:
helper.persons = (SELECT tbl1
FROM ((SELECT IF(Min(shelper.persons) IS NULL, 1000, Min(shelper.persons)) as tb1
FROM tx_wbfincas_domain_model_finca_searchhelper shelper
WHERE shelper.finca_uid = tx_wbfincas_domain_model_finca.uid
LIMIT 1
) UNION
(SELECT max(shelper.persons) AS tb1
FROM tx_wbfincas_domain_model_finca_searchhelper shelper
WHERE shelper.finca_uid = tx_wbfincas_domain_model_finca.uid
LIMIT 1
)
) x
ORDER BY tb1 ASC
LIMIT 1
)
是的,我的第二次尝试是用更多的括号。 有了你的询问,我明白了
Unknown column 'tx_wbfincas_domain_model_finca.uid' in 'where clause'
您的第一个选择应该是“选择tb1”,而不是tbl1-我说的对吗
我是否也应该在子查询中加入tx\u wbfincas\u domain\u model\u finca 是的,我的第二次尝试是用了更多的括号。 有了你的询问,我明白了
Unknown column 'tx_wbfincas_domain_model_finca.uid' in 'where clause'
您的第一个选择应该是“选择tb1”,而不是tbl1-我说的对吗
我是否也应该在子查询中加入tx\u wbfincas\u domain\u model\u finca 我有一个解决方案:
在联合之前,我必须删除嵌套查询中的第一个限制
查询:
SELECT tx_wbfincas_domain_model_finca.*, helper.*
FROM tx_wbfincas_domain_model_finca
LEFT JOIN tx_wbfincas_domain_model_finca_searchhelper as helper
ON tx_wbfincas_domain_model_finca.uid = helper.finca_uid
WHERE hidden=0
AND deleted=0
AND helper.persons =
(
SELECT IF(MIN(shelper.persons) IS NULL, 1000, MIN(shelper.persons)) AS tb1
FROM tx_wbfincas_domain_model_finca_searchhelper AS shelper
WHERE shelper.finca_uid = tx_wbfincas_domain_model_finca.uid
UNION
(
SELECT MAX(shelper.persons) AS tb1
FROM tx_wbfincas_domain_model_finca_searchhelper AS shelper
WHERE shelper.finca_uid = tx_wbfincas_domain_model_finca.uid LIMIT 1
)
ORDER BY tb1 ASC LIMIT 1
)
AND uid IN
(
SELECT uid_local
FROM tx_wbfincas_finca_category_mm
WHERE uid_foreign=4
)
GROUP BY uid
ORDER BY min_price ASC
我有一个解决办法:
在联合之前,我必须删除嵌套查询中的第一个限制
查询:
SELECT tx_wbfincas_domain_model_finca.*, helper.*
FROM tx_wbfincas_domain_model_finca
LEFT JOIN tx_wbfincas_domain_model_finca_searchhelper as helper
ON tx_wbfincas_domain_model_finca.uid = helper.finca_uid
WHERE hidden=0
AND deleted=0
AND helper.persons =
(
SELECT IF(MIN(shelper.persons) IS NULL, 1000, MIN(shelper.persons)) AS tb1
FROM tx_wbfincas_domain_model_finca_searchhelper AS shelper
WHERE shelper.finca_uid = tx_wbfincas_domain_model_finca.uid
UNION
(
SELECT MAX(shelper.persons) AS tb1
FROM tx_wbfincas_domain_model_finca_searchhelper AS shelper
WHERE shelper.finca_uid = tx_wbfincas_domain_model_finca.uid LIMIT 1
)
ORDER BY tb1 ASC LIMIT 1
)
AND uid IN
(
SELECT uid_local
FROM tx_wbfincas_finca_category_mm
WHERE uid_foreign=4
)
GROUP BY uid
ORDER BY min_price ASC
如此大的代码转储需要一个问题陈述来回答。在我脑海中,我敢打赌我们至少可以摆脱一些嵌套子查询。。。联盟。。。选择?您期望的结果是什么?如此大的代码转储需要一个问题陈述来回答。在我脑海中,我敢打赌我们至少可以摆脱一些嵌套子查询。。。联盟。。。选择?你期望的结果是什么?