【发布时间】:2014-09-17 10:32:23
【问题描述】:
我正在尝试根据三列的匹配来选择重复记录。三元组的列表可能很长(1000 个),所以我想简明扼要。
当我有一个大小为 10(已知重复)的列表时,它只匹配 2 个(看似随机的)而错过了其他 8 个。我希望返回 10 条记录,但只看到 2 条。
我已经把它缩小到这个问题:
这将返回一条记录。预期 2:
select *
from ali
where (accountOid, dt, x) in
(
(64, '2014-03-01', 10000.0),
(64, '2014-04-23', -122.91)
)
按预期返回两条记录:
select *
from ali
where (accountOid, dt, x) in ( (64, '2014-03-01', 10000.0) )
or (accountOid, dt, x) in ( (64, '2014-04-23', -122.91) )
知道为什么第一个查询只返回一条记录吗?
【问题讨论】:
-
我无法在我的机器上重现该问题(MySQL 5.6.14)。你会做一个小提琴吗?
-
您能否编辑您的问题并描述列的数据类型 (
SHOW CREATE TABLE ali)?如果您对列x使用FLOAT或DOUBLE,则可能会导致相等比较失败,因为精确值以意想不到的方式四舍五入。还请具体说明您使用的 MySQL 版本。 -
你能贴出你正在使用的代码吗?我将它复制到一个表中,起初它看起来像是一个操作数值,但这是我缺少括号集的错。像 Vatev 我无法重现问题
-
不知道如何让它成为一个小提琴。我已将查询更改为使用: (a,b,c) = (...) or (a,b,c) = () or (a,b,c) = () ... 不理想我知道,但它有效。当我有更多时间时,我会发布代码。感谢您的关注。
-
google for sql fiddle (sqlfiddle.com),它是一个发布和测试 SQL 的平台。或者只是在这里发布您的表创建语句。