使用单个表和关系表联接表的正确方法

时间:2018-08-13 19:03:57

标签: sql

我在这里完全感到困惑... 我有一张列出零件的表格。所有零件都列在同一表中。零件之间有关系。一些部分包含在其他部分中:

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

我需要找到所有不育有孩子的父母。

我过去曾经做过简单的选择,但这伤了我的大脑。我在这里尝试的一切都无法解决。

有人可以指出正确的方向吗?

2 个答案:

答案 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;