括号会影响mysql结果吗?
我正在尝试运行此查询:括号会影响mysql结果吗?,sql,mysql,Sql,Mysql,我正在尝试运行此查询: ( (SELECT * FROM (SELECT * FROM `users` WHERE `access_level` > 0) AS `search_subject` WHERE (BINARY `username` = ?)) UNION (SELECT * FROM (SELECT * FROM `users` WHERE `access_level` > 0) AS `search_subject` WHERE (BINA
(
(SELECT * FROM (SELECT * FROM `users` WHERE `access_level` > 0) AS `search_subject` WHERE (BINARY `username` = ?))
UNION
(SELECT * FROM (SELECT * FROM `users` WHERE `access_level` > 0) AS `search_subject` WHERE (BINARY `username` = ?))
)
LIMIT 5
但是在LIMIT 5
之前,由于周围的括号出现了一个错误<代码>obs:查询都在一行中,为了更好地阅读,我把它放在这里。sql中是否允许使用它?
以下工作很好:
(SELECT * FROM (SELECT * FROM `users` WHERE `access_level` > 0) AS `search_subject` WHERE (BINARY `username` = ?))
UNION
(SELECT * FROM (SELECT * FROM `users` WHERE `access_level` > 0) AS `search_subject` WHERE (BINARY `username` = ?))
LIMIT 5
我的问题是:第二个版本等同于第一个版本,或者第二个版本中的限制仅适用于第二个选择?如果是,我能做些什么来解决这个问题?谢谢(:
ps:不要担心问号。那只是因为准备好了陈述
实际上,你不需要括号:
SELECT *
FROM `users`
WHERE `access_level` > 0
AND BINARY `username` = ?
UNION
SELECT *
FROM `users`
WHERE `access_level` > 0
AND BINARY `username` = ?
LIMIT 5
首先,工会的任何一方都没有区别,所以没有必要这样做
不,该限制适用于所有UNION查询的结果,ORDER BY子句也是如此。实际上,您不需要括号:
SELECT *
FROM `users`
WHERE `access_level` > 0
AND BINARY `username` = ?
UNION
SELECT *
FROM `users`
WHERE `access_level` > 0
AND BINARY `username` = ?
LIMIT 5
首先,工会的任何一方都没有区别,所以没有必要这样做
不,该限制适用于所有UNION查询的结果,ORDER BY子句也是如此。我假设这些查询都是示例查询,因为您的SELECT
语句不仅冗余而且格式错误
但是,为了回答您原来的问题,添加括号会创建一个表达式,该表达式会更改运算顺序。就像在数学中一样。因此,第一个示例中表达式的结果不支持LIMIT子句。但是,第二个示例中的UNION语句支持LIMIT子句
长话短说,括号使它成为一个不同的语句,并使限制无效。您不需要它们。这很微妙,但这就是问题所在。我假设这些是示例查询,因为您的SELECT
语句不仅冗余而且格式不好
但是,为了回答您原来的问题,添加括号会创建一个表达式,该表达式会更改运算顺序。就像在数学中一样。因此,第一个示例中表达式的结果不支持LIMIT子句。但是,第二个示例中的UNION语句支持LIMIT子句
长话短说,括号使它成为一个不同的语句,并使限制无效。你不需要它们。这很微妙,但这就是问题所在。如果我在每个选择中都使用ORDER BY会怎么样?我只是在这里尝试过,没有错误…@hugo_leonardo:MySQL支持ORDER BY(和限制)在每个联合中,只要它在括号内,包含一个构成联合一部分的查询。我不知道还有其他数据库允许这样做。如果我在每个选择中都使用ORDER BY呢?我只是在这里尝试了一下,没有错误…@hugo_leonardo:MySQL支持ORDER BY(和LIMIT)在每个并集中,只要它在括号内,就包含一个构成并集一部分的查询。我不知道还有其他数据库允许这样做。允许对并集进行独立排序和限制的括号不是运算顺序是的。这是将括号添加到表达式中所做工作的概括。这种运算顺序是准确的是否更改表达式-与(x或y)相比,考虑更多的x或y和z
和z
。允许按独立顺序并限制并集的括号不是运算顺序是的。这是添加括号对表达式的作用的概括。准确地说,运算顺序确实会改变表达式-与(x或y)和z
相比,考虑更多的x或y和z
。