【发布时间】:2021-03-27 08:15:03
【问题描述】:
当然,我们之前已经完成了我们的工作,并在这个社区或网络上搜索过类似的帖子,但我们一无所获。
问题:
我们对当前的托管服务提供商不满意,必须做出改变。在我们的数据库从 MySQL 5.7 切换到 MariaDB 10.3 的过程中,我们发现了 SET 处理的差异,这在 MySQL 中非常有效。
SQL 代码:
SET @sb = 0;
SELECT art,sb
FROM ARTICLE
WHERE(@sb:=sb) > 700 AND @sb <= 1000 >AND art = 'AM';
MySQL 结果:
| art | sb |
|---|---|
| AM | 900.00 |
| AM | 960.00 |
| AM | 1000.00 |
| AM | 770.00 |
| AM | 800.00 |
| the list is much longer... |
MariaDB 结果:
| art | sb |
|---|---|
| AM | 770.00 |
| AM | 960.00 |
| AM | 1200.00 |
| AM | 3000.00 |
| only 10 rows... |
其实它们之间是有区别的。
但我们想知道:
- 我们可以在 MariaDB 中进行配置,以便在 MySQL 中得到相同的结果吗?
- 我们是否应该将 MariaDB 中的 Set 处理替换为另一个?
【问题讨论】:
-
SELECT列表或WHERE子句中的操作顺序从未被定义为从左到右,因此您不应该依赖于在阅读之前发生的分配时间。 -
为什么需要使用
@sb?为什么不能使用WHERE sb > 700 AND sm <= 1000? -
这只是一个例子。它是声明的历史发展。我们只想知道在 MariaDB 中是否或如何处理它。