我的表看起来像这样:WHERE A或B IN(x)的不匹配,但返回的行
| a | ts_9 | ts_11 |
|----|------|-------|
| yx | 0 | |
| xy | 0 | |
出于某种原因,得到返回的行,当我打电话:
SELECT * FROM things WHERE ts_9 IN ("asdewdwedewd") OR ts_11 IN ("asdewdwedewd")
为什么会发生?
随意重新创建与复制粘贴您的分贝:
CREATE TABLE `things` (
`a` char(12) NOT NULL DEFAULT '',
`ts_9` decimal(2,0) NOT NULL,
`ts_11` char(1) NOT NULL DEFAULT '',
PRIMARY KEY (`a`),
UNIQUE KEY `a` (`a`));
INSERT INTO `things` (`a`, `ts_9`, `ts_11`) VALUES ('yx', '0', ''), ('xy', '0', '');
我的猜测是字符串被转换为一个整数。 – Uueerdo
@Uueerdo很棒的猜测,谢谢!有没有任何通用的预防措施来避免这种情况? – Basti
我能想到的唯一的事情就是不要在涉及到相等的表达式中混合使用数字和字符串类型,除非您可以保证字符串正确解析。 – Uueerdo