我在这里完全感到困惑... 我有一张列出零件的表格。所有零件都列在同一表中。零件之间有关系。一些部分包含在其他部分中:
Key Desc Exists
--- ------------- -------
5 Assy 1
6 Component A 1
7 Component B 0
在上表中,组件B在现实生活中不存在。
这三个部分像这样在一起:
Assy
-Component 1 Exists
-Component 2 Does not exist
我有一个表可以像这样调用关系:
ParentKey Child Key
---------- -------------
5 6
5 7
我需要找到所有不育有孩子的父母。
我过去曾经做过简单的选择,但这伤了我的大脑。我在这里尝试的一切都无法解决。
有人可以指出正确的方向吗?
答案 0 :(得分:0)
尝试一下:
SELECT *
FROM part as p
INNER JOIN partRelationships as pr on p.Key = pr.ParentKey
WHERE p.ChildKey IN (
SELECT Key FROM part WHERE Exists = 0
)
答案 1 :(得分:0)
这是您要找的东西吗?还是程序集是递归的(即,程序集->是否具有零件->具有零件-> ...)?
DROP TABLE IF EXISTS Parts;
DROP TABLE IF EXISTS [assemblies];
GO
CREATE TABLE Parts
(
[Key] INT
, [Desc] VARCHAR(500)
, [Exists] BIT
);
GO
INSERT Parts ([Key],[Desc],[Exists]) VALUES
(5, 'Assy', 1)
, (6, 'Component A', 1)
, (7, 'Component B', 0)
;
GO
CREATE TABLE [Assemblies]
(
ParentKey INT
, ChildKey INT
);
GO
INSERT [Assemblies] (ParentKey, ChildKey) VALUES
(5, 6)
, (5, 7);
GO
SELECT
parent.[Key]
, parent.[Desc] AS AssemblyName
, child.[Desc] AS PartName
, child.[Exists]
FROM
[Assemblies] a
INNER JOIN dbo.Parts parent
ON parent.[Key] = a.[ParentKey]
INNER JOIN dbo.Parts child
ON child.[Key] = a.[ChildKey]
WHERE
child.[Exists] = 0;