我有一个小的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 | | +-----------+-----------------+------+-----+---------+----------------+
我的where子句遵循row-subqueries语法。 如果我做:
SELECT id, dividends FROM test where (id,dividends) >= (660,0.5);
或者
SELECT id, dividends FROM test where (id,dividends) >= (660,CAST(0.5 AS DECIMAL(8,6)));
我得到这个结果:
+-----+-----------+ | id | dividends | +-----+-----------+ | 660 | 0.500000 | | 661 | 0.470000 | | 662 | 0.470000 | | 663 | 0.470000 | | 664 | 2.580000 | | 665 | 2.581000 | ...
在我看来,没有考虑股息> = 0.5。为什么?
您正在使用行构造函数。MySQL将它们完全像 表中的行 一样对待。因此,WHERE (id,dividends) >=(660,0.5)有效地执行以下操作:
WHERE (id,dividends) >=(660,0.5)
ORDER BY id,dividends;
ORDER BY id,dividends
找到该(660,0.5)顺序中的点;
(660,0.5)
仅筛选等于或大于排序中该点的那些记录。
因此,它与相同WHERE (id=660 AND dividends>=0.5) OR id>660。
WHERE (id=660 AND dividends>=0.5) OR id>660
看来您真正想表达的逻辑是WHERE id>=660 AND dividends>=0.5。
WHERE id>=660 AND dividends>=0.5