Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果没有公共列,则不存在_Sql_Not Exists - Fatal编程技术网

Sql 如果没有公共列,则不存在

Sql 如果没有公共列,则不存在,sql,not-exists,Sql,Not Exists,我有三张桌子,如下所示 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

我有三张桌子,如下所示

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));
我尝试使用
不存在
,但没有得到想要的结果。

只需尝试以下方法:

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

您正在查找除BOM表中显示的产品以外的所有零件

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

(不过,并不是每个数据库管理系统都支持这个标准关键字。这就是为什么您应该总是用所涉及的数据库管理系统来标记SQL问题。我认为MySQL根本不支持
除了
。Oracle称之为
减去
。大多数其他RDBMS应该支持
除了

兄弟,试试这个。使用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

您想要哪个数据库系统?SQL Server?神谕MySQL。。。样本数据和期望的结果将非常有用。