【问题标题】:NOT EXISTS without a common columnNOT EXISTS 没有公共列
【发布时间】:2018-04-13 09:34:56
【问题描述】:

我有 3 个如下表,

Table - 1: TMP (Column: PARTS)

Table - 2: BOM (Column: ID - which is a primary key in table 3)

Table - 3: PROD (Column1: ID - Primary key in this table, Column2: PARTS)

现在我必须从Table1 中找到在Table2 中不存在的部件列表。

我尝试了以下查询,但性能太差了。

SELECT PARTS FROM TMP WHERE ((TMP.PARTS) NOT IN (SELECT (SELECT PARTS FROM PROD WHERE PROD.ID = BOM.ID) FROM BOM));

我尝试使用NOT EXISTS,但没有得到想要的结果。

【问题讨论】:

  • 您询问的是哪个数据库系统? SQL 服务器?甲骨文? MySQL? ...
  • 样本数据和期望的结果真的很有帮助。

标签: sql not-exists


【解决方案1】:

试试这个:

SELECT PARTS 
FROM TMP 
WHERE PARTS NOT IN 
            (SELECT PARTS 
                FROM PROD P
                JOIN BOM B ON B.ID = P.ID)

【讨论】:

    【解决方案2】:

    您正在寻找所有零件除了出现在 BOM 中的产品。

    select parts from tmp
    except
    select parts from prod where id in (select id from bod);
    

    (不过,并非每个 DBMS 都支持这个标准关键字。这就是为什么您应该始终使用所涉及的 DBMS 标记 SQL 问题。我认为 MySQL 根本不支持 EXCEPT。Oracle 将其称为 MINUS。大多数其他RDBMS 应该支持EXCEPT。)

    【讨论】:

      【解决方案3】:

      兄弟试试这个。使用 join 是一种比其他任何方法都快得多的方法。

      SELECT PARTS 
      FROM TMP 
      left join BOM on 
          TMP.PARTS   =   BOM.PARTS
      join PROD on
          BOM.ID  =   PROD.ID
      where BOM.ID is null
      

      【讨论】:

        猜你喜欢
        • 2021-03-16
        • 1970-01-01
        • 2015-02-17
        • 1970-01-01
        • 2015-10-13
        • 2012-06-08
        • 2020-10-24
        • 1970-01-01
        • 2021-08-29
        相关资源
        最近更新 更多