您应该为查询设置别名以指示列的来源。
此外,INNER JOIN 将比 FULL OUTER JOIN 更快,这不太有意义,原因
有两个: 1. 使用该WHERE SKU=
子句将 FULL JOIN 减少为 LEFT JOIN,因为行必须与左表匹配
2. 将记录保存在LEFT 表没有任何用途,因为该子句SMGRID
的目的是 NULLIN()
SELECT *
FROM ZINVN
WHERE ZINVN.GRID IN
(
SELECT OTBCLS.SMGRID
FROM SKU JOIN OTBCLS ON SKU.SKCLCD = OTBCLS.SMCLCD
WHERE SKU.SKSKU=800234
);
当使用相关的 EXISTS 测试以下面的等效形式编写时,此存在测试通常执行得更快。
SELECT *
FROM ZINVN
WHERE EXISTS (
SELECT 1
FROM SKU JOIN OTBCLS ON SKU.SKCLCD = OTBCLS.SMCLCD
WHERE SKU.SKSKU=800234 AND ZINVN.GRID=OTBCLS.SMGRID
);
话虽如此,您是否检查过额外的空格是“ZINVN.GRID”和“OTBCLS.SMGRID”之间的区别?