确定集

时间:2016-10-10 18:38:31

标签: sql sql-server

我有类似的表:

#1
OriginalID | Area
========== | ====
2          | Abdomen
3          | Abdomen

#2
Area   | Part
====   | ====
Abdomen| Abdomen
Bottom | Bottom


#3
Part   | OriginalID
====   | ==========
Abdomen| 2
Bottom | 3

期望的结果

OriginalID | Area    | Part
========== | ====    | ====
3          | Abdomen | NULL

一旦我弄明白,我可以将表更新为:

#3
Part   | OriginalID
====   | ==========
Abdomen| 2
Bottom | 3
Abdomen| 3

因此,对于期望的结果,我想知道它最初被分配到50(表#1),但表Area中的特定#3没有对应的关系。

现在,我想知道Area中的#1是否与ID中的同一#3无关。 #3IDPart之间的多对多关系。 Area现在已经被分成了自己的表格。但它一直保存在#1中。不幸的是,它仍然被使用,现在我正在重构一些代码以确保#1Area之间的关系未正确移植到#2

#2AreaPart之间的多对多关系。

有没有办法在Area中使用SQL查找哪些#3关系未被考虑?让计算机为我做这件事会很好,但我不能完全理解如何做到这一点。

提前致谢!

以下是一些测试数据

CREATE TABLE #1
(
    OriginalID INT NOT NULL,
    Area VARCHAR(50) NOT NULL
)

CREATE TABLE #2
(
    Area VARCHAR(50) NOT NULL,
    Part VARCHAR(50) NOT NULL
)

CREATE TABLE #3
(
    Part VARCHAR(50) NOT NULL,
    OriginalID INT NOT NULL
)

INSERT INTO #1 VALUES
    (2, 'Abdomen'),
    (3, 'Abdomen')

INSERT INTO #2 VALUES
    ('Abdomen', 'Abdomen'),
    ('Bottom', 'Bottom')

INSERT INTO #3 VALUES
    ('Abdomen', 2),
    ('Bottom', 3)

DROP TABLE #1
DROP TABLE #2
DROP TABLE #3

杰森的回答目前不正确

SELECT a.Area
FROM #1 AS a
WHERE NOT EXISTS (
  SELECT * 
  FROM #2 as b 
  INNER JOIN #3 as c 
  ON b.Part = c.Part
  WHERE a.Area = b.Area)

NULL结果中的结果。

3 个答案:

答案 0 :(得分:1)

SELECT a.Area
FROM table1 AS a
WHERE NOT EXISTS (SELECT * 
FROM table2 as b 
INNER JOIN table3 as c 
ON table2.part = table3.part
WHERE a.Area = b.Area)

答案 1 :(得分:1)

下面将为您提供不在#3中的内容:

td img.off{
    display:none;
}

td:hover img.off{
    display:inline;
}

td:hover img.on{
    display:none;
}

答案 2 :(得分:0)

根据您的解释,看看这是否有帮助。

Select table1.OriginalID, table1.Area, table3.Part
From table1
Left Join table3 on table1.OriginalID = table3.OriginalID
Where table3.OriginalID is null