0

我有以下查询:

SELECT * 
FROM ZINVN 
WHERE ZINVN.GRID IN
(
        SELECT SMGRID 
        FROM SKU FULL JOIN OTBCLS ON SKU.SKCLCD = OTBCLS.SMCLCD
        WHERE SKSKU=800234
);

这个查询不返回结果,而如果我在没有 in 子句的情况下运行它,它会返回预期的结果。

内部的查询也()运行良好并返回预期的结果。

我的查询中的问题在哪里?

4

1 回答 1

3

您应该为查询设置别名以指示列的来源。
此外,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”之间的区别?

于 2013-04-24T04:34:36.710 回答