使用WHERE IN和临时表供稿作为参数,MySql查询引擎将返回完全意外的结果。
CREATE TABLE MDC_Customer (StoreId char(20), Name nvarchar(100));
CREATE TABLE MDC_Caixa (Data datetime, CaixaId int, StoreId char(20), Revenue DECIMAL(15,2));
CREATE TEMPORARY TABLE IF NOT EXISTS StoreRev (Stores nvarchar(44));
TRUNCATE TABLE StoreRev;
INSERT INTO StoreRev SELECT StoreId FROM MDC_Customer WHERE StoreId IN ('00013');
CREATE TEMPORARY TABLE IF NOT EXISTS CaixaRev (CaixaID int, StoreID char(20));
TRUNCATE TABLE CaixaRev;
INSERT INTO CaixaRev
SELECT CaixaId, StoreId
FROM MDC_Caixa CX
WHERE CAST(CX.Data AS date) BETWEEN '2018-05-01' AND '2018-05-01'
AND CX.StoreID IN (SELECT StoreID FROM StoreRev);
SELECT * FROM StoreRev;
SELECT * FROM CaixaRev;
DROP TEMPORARY TABLE StoreRev;
DROP TEMPORARY TABLE CaixaRev;
实际结果: MySql计算CX.StoreID IN(从StoreRev中选择SELECT StoreID)为true,而不是抛出“ INVALID SYNTAX ERROR”(无效语法错误);
预期结果: MySql应该抛出“ INVALID SYNTAX ERROR”(无效语法错误),报告StoreRev临时表中没有“ StoreID”字段;