我想使用INFORMATION_SCHEMA修剪数据库中的表。要测试DELETE我正在使用SELECT来查看数据是否正确返回。我想根据数据库是否存在从master.company
中删除数据。这就是我试图和它不工作:为什么我不能在子选择中使用INFORMATION_SCHEMA?
USE DATABASE master;
CREATE TABLE `company` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`domain` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`db_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `domain` (`domain`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
SELECT db_name FROM master.company WHERE db_name IN (SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA);
不过,我可以得到它的工作时,我反向参考,像这样的表:
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME in (SELECT db_name FROM master.company);
任何想法?
无论你'select'语句应产生正确的结果。从你的成功查询中出现一个'db_name'(第二个)并尝试执行第一个,如下所示:'select ... where db_name in('')'。第二次尝试是将schema_name和db_name强制转换为varchar(255)并查看。 –
zedfoxus