拥有这个:
code IN
(
SELECT DISTINCT aaa.code
FROM ORGHEADER AS aaa
LEFT JOIN ORGRELATEDPARTY AS bbb
ON aaa.oh_pk = bbb.parent
WHERE aaa.oh_pk NOT IN
(
SELECT fu.parent
FROM ORGRELATEDPARTY fu
WHERE fu.partytype = 'MNG'
)
)
阅读这篇文章:在SQL 中将IN更改为EXISTS
试图将其更改为";存在";,但产生了这个,它没有起作用:
code EXISTS
(
SELECT *
FROM ORGHEADER AS aaa
LEFT JOIN ORGRELATEDPARTY AS bbb
ON aaa.oh_pk = bbb.pr_oh_parent
WHERE aaa.oh_pk NOT IN
(
SELECT fu.parent
FROM ORGRELATEDPARTY fu
WHERE fu.pr_partytype = 'MNG'
)
WHERE code = DISTINCT aaa.oh_code
)
错误为3706:语法错误:应为'='和'DISTINCT'关键字之间的值。
您已经有多余的代码了
在IN
子查询中,您正在从ORGHEADER
中选择一列,因此LEFT
联接只会添加噪声,因为它在任何情况下都会返回ORGHEADER
中的所有行
假设code
属于别名为t
的表,则可以使用EXISTS
编写如下代码:
WHERE EXISTS (
SELECT 1
FROM ORGHEADER AS aaa
WHERE aaa.oh_code = t.code
AND aaa.oh_pk NOT IN (
SELECT parent
FROM ORGRELATEDPARTY
WHERE pr_partytype = 'MNG'
)
)
此外,如果表ORGRELATEDPARTY
的列parent
可能返回null
s,则NOT IN
将不起作用。