MySQL返回不应该匹配的WHERE子句的结果

时间:2018-03-16 11:57:57

标签: mysql

我有两个表,其中一个表有另一个表的引用。出于测试目的,我创建了这两个表

DROP TABLE IF EXISTS `test1`;
CREATE TABLE `test1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `test2_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `test1_test2_id_fk` (`test2_id`),
  CONSTRAINT `test1_test2_id_fk` FOREIGN KEY (`test2_id`) REFERENCES `test2` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;


LOCK TABLES `test1` WRITE;
INSERT INTO `test1` VALUES (1,1);
UNLOCK TABLES;

DROP TABLE IF EXISTS `test2`;
CREATE TABLE `test2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `value` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

LOCK TABLES `test2` WRITE;
INSERT INTO `test2` VALUES (1,'group','Baustahl');
UNLOCK TABLES;

到目前为止一切顺利,但是当我现在执行此查询时:

SELECT * FROM test1 t1 JOIN test2 t2 ON t2.id = t1.test2_id WHERE t2.name = 'group' AND t2.value = 0;

IMO它应该产生一个空结果,因为我的数据库中的valueBaustahl而我正在查询0。但是,正如您在此处看到的那样,会返回Baustahl结果

screenshot of db result

我似乎无法找到这种行为的原因,因为它是def。不是我的期望。任何想法为什么会这样?

1 个答案:

答案 0 :(得分:1)

如果你的t2.value是varchar,你应该使用'0'

SELECT * 
FROM test1 t1 
JOIN test2 t2 ON t2.id = t1.test2_id WHERE t2.name = 'group' AND t2.value = '0';

nuemric 0值未按您的意思转换