代码之家  ›  专栏  ›  技术社区  ›  Vityata

在中更改为在SQL中存在-具有不同的

  •  -2
  • Vityata  · 技术社区  · 3 年前

    有了这个:

    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'
    )
    )
    

    阅读这篇文章: Changing IN to EXISTS in SQL

    试图将其更改为“存在”,但产生了这种情况,但没有成功:

    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”关键字之间。

    1 回复  |  直到 3 年前
        1
  •  2
  •   forpas    3 年前

    你已经有多余的代码了。
    里面 IN 正在从中选择列的子查询 ORGHEADER ,所以 LEFT join只会添加噪波,因为它在任何情况下都会返回 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'
        )
    )
    

    而且 NOT IN 如果列 parent 桌边 ORGRELATEDPARTY 可能会回来 null s