我想使用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