列がどこから来たのかを示すために、クエリにエイリアスを設定する必要があります。また、INNER JOINはFULL
OUTER
JOIN よりも高速ですが、これは 2 つの理由からあまり意味がありません
。句の目的のために NULL になるため、LEFT テーブルは何の役にも立たないWHERE SKU=
SMGRID
IN()
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」の違いである余分なスペースを確認しましたか?