Bru*_*ald 9 mysql sql subquery
我有一个小的mysql表(MySQL版本5.6.23):
+-----------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-----------------+------+-----+---------+----------------+
| id | int(6) unsigned | NO | PRI | NULL | auto_increment |
| dividends | float(8,6) | YES | | NULL | |
+-----------+-----------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
我的where子句遵循row-subqueries语法.
如果我做:
SELECT id, dividends FROM test
where (id,dividends) >= (660,0.5);
Run Code Online (Sandbox Code Playgroud)
要么
SELECT id, dividends FROM test
where (id,dividends) >= (660,CAST(0.5 AS DECIMAL(8,6)));
Run Code Online (Sandbox Code Playgroud)
我得到这个结果:
+-----+-----------+
| id | dividends |
+-----+-----------+
| 660 | 0.500000 |
| 661 | 0.470000 |
| 662 | 0.470000 |
| 663 | 0.470000 |
| 664 | 2.580000 |
| 665 | 2.581000 |
...
Run Code Online (Sandbox Code Playgroud)
在我看来,股息> = 0.5没有被考虑在内.为什么?
你正在使用行构造函数.MySQL将它们视为与表的行完全相同.因此WHERE (id,dividends) >= (660,0.5)有效地做到:
ORDER BY id,dividends;
找到符合(660,0.5)该顺序的点;
仅过滤那些等于或大于排序中该点的记录.
因此,它是一样的WHERE (id=660 AND dividends>=0.5) OR id>660.
看起来好像你真正希望表达的逻辑是WHERE id>=660 AND dividends>=0.5.