具有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.)