将In更改为Exists In SQL-使用DISTINCT



拥有这个:

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可能返回nulls,则NOT IN将不起作用。

最新更新