SELECT *
FROM vbak
INNER JOIN vbap ON vbak.vbeln = vbap.vbeln
WHERE vbap.vbeln NOT IN (
SELECT vbeln
FROM vbap
WHERE zzt = 'H'
);
这个查询使用了子查询,该子查询选择了在 vbap
表中 zzt
字段为“H”的记录的合同号(vbeln
),然后外部查询选择了在 vbap
表中不包含这些合同号的记录。这样,你就可以得到排除了包含至少一条 zzt
字段为“H”的记录的结果。
使用子查询可能会影响查询的效率,特别是在处理大量数据时。为了提高效率,你可以考虑使用联接和条件来过滤数据而不是子查询。以下是一种改进的查询方式:
SELECT *
FROM vbak
INNER JOIN vbap ON vbak.vbeln = vbap.vbeln
LEFT JOIN (
SELECT DISTINCT vbeln
FROM vbap
WHERE zzt = 'H'
) AS excluded_vbap ON vbap.vbeln = excluded_vbap.vbeln
WHERE excluded_vbap.vbeln IS NULL;
在这个查询中,使用了左连接和 IS NULL 条件来找到没有匹配到具有 "H" 状态的记录的合同号。这种方式通常在大型数据集上执行得更有效率,因为它避免了子查询中的不必要的重复计算。