我有两个表,其中一个表有另一个表的引用。出于测试目的,我创建了这两个表
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它应该产生一个空结果,因为我的数据库中的value
是Baustahl
而我正在查询0
。但是,正如您在此处看到的那样,会返回Baustahl
结果
我似乎无法找到这种行为的原因,因为它是def。不是我的期望。任何想法为什么会这样?
答案 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值未按您的意思转换