具有2个子查询条件的SQL查询

具有2个子查询条件的SQL查询,sql,sql-server,Sql,Sql Server,主表: MasterID | PartID 1 1 2 3 3 5 零件表: PartID | PartName | DeleteDate 1 Part1 NULL 2 Part2 NULL 4 Part4 NULL 5 Part5 08-04-2017 结果表: MasterID | PartID 2

主表:

MasterID | PartID  
1          1  
2          3  
3          5  
零件表:

PartID | PartName | DeleteDate  
1        Part1      NULL  
2        Part2      NULL  
4        Part4      NULL  
5        Part5      08-04-2017 
结果表:

MasterID | PartID  
2          3  
3          5  
这两个表存在于两个不同的数据库中,如果主表的
PartID
不在Part表中,并且主表的任何
PartID
在Part表中被删除(即
DeleteDate
不为NULL),我需要使用SQL查询来获取记录

我正在尝试下面的查询,但没有得到预期的结果

Select  
    *  
FROM DBNAME.DBO.Master  
Where PartID in (  
    Select  
        PartID   
     from Part)   
and PartID not in (  
    Select   
        PartID   
    from Part   
    where DeleteDate is NOT NULL)

请让我知道如何实现这一点

一种方法是将
主控
表左连接到
零件
表,然后保留未映射到
零件
表中任何内容或映射到已删除零件的任何零件

SELECT
    m.PartID,
    CASE WHEN p.partID IS NULL THEN 'missing' ELSE 'deleted' END AS status
FROM Master m
LEFT JOIN Part p
    ON m.PartID = p.PartID
WHERE
    p.PartID IS NULL OR         -- missing part
    p.DeleteDate IS NOT NULL    -- deleted (but present) part

一种方法是将
主表
左连接到
零件
表,然后保留未映射到
零件
表中任何内容或映射到已删除零件的任何零件

SELECT
    m.PartID,
    CASE WHEN p.partID IS NULL THEN 'missing' ELSE 'deleted' END AS status
FROM Master m
LEFT JOIN Part p
    ON m.PartID = p.PartID
WHERE
    p.PartID IS NULL OR         -- missing part
    p.DeleteDate IS NOT NULL    -- deleted (but present) part

另一种方法是,可以在两种情况下使用union

Select 
       t1.* 
From 
       DBNAME.DBO.Master t1,Part t2
Where 
       t1.PartID = t2.PartID(+) and t2.PartID is null
Union All
Select 
       t1.* 
From 
       DBNAME.DBO.Master t1,Part t2
Where 
       t1.PartID = t2.PartID and t2.DeleteDate is not null;

另一种方法是,可以在两种情况下使用union

Select 
       t1.* 
From 
       DBNAME.DBO.Master t1,Part t2
Where 
       t1.PartID = t2.PartID(+) and t2.PartID is null
Union All
Select 
       t1.* 
From 
       DBNAME.DBO.Master t1,Part t2
Where 
       t1.PartID = t2.PartID and t2.DeleteDate is not null;

当发布代码或应该使用monospace字体的内容时,请选择您粘贴的内容,然后按{}按钮,使其对我们可读!当发布代码或应该使用monospace字体的内容时,请选择您粘贴的内容,然后按{}按钮,使其对我们可读!您将得到一个错误,该错误是由于select listOh中的未关联parted导致的,您刚刚修复了它:)在数千个SQL问题之后,检测此类错误会变得更容易。也许添加
CASE当p.Partid为NULL时,然后添加'missing'ELSE'deleted'结束为status
会使结果更有用,我相信有一天我们会超过Gordon Linoff.)您将得到一个错误,该错误是由于select listOh中的未关联parted导致的,您刚刚修复了它:)在数千个SQL问题之后,检测此类错误会变得更容易。也许添加
CASE当p.Partid为NULL时,然后添加'missing'ELSE'deleted'结束为status
会使结果更有用,我相信有一天我们会超过Gordon Linoff.)