2

我有一个包含零件编号和相关组件零件编号和位置的表格。

每个part_no可能有多个组件或根本没有。

这是一个例子

Part_No | Component_Part_No | Location
-----------------------------------------    
 12345  | NULL              | 001
 50001  | NULL              | 001
 50001  | 4001              | 001
 50001  | 4002              | 001 

部件号 5001 以及其他组件具有 NULL 值。我希望能够删除零件 50001 具有 NULL 值的行,但保持零件号 12345 不变。问题是 50001 的 NULL 值在表中不正确,我需要删除这些行。

任何帮助表示赞赏。

谢谢

4

5 回答 5

6
DELETE from table
WHERE component_part_no IS NULL
AND part_no in
    (SELECT part_no 
    FROM table
    WHERE component_part_no IS NOT NULL)
于 2012-11-12T17:11:57.530 回答
2
delete from table where Part_No = 50001 and Component_Part_No IS NULL
于 2012-11-12T17:11:20.157 回答
1

可能有更漂亮的编写方式,但这应该可以满足您的要求:

delete from Table
where Component_Part_No is null
and Part_No in (select Part_No from Table
                where Component_Part_No is not null)
于 2012-11-12T17:31:07.660 回答
1

为了做到这一点...零件有组件。如果零件没有已知组件,则存储有关该零件(作为一个整体)位置的信息至关重要,如果零件具有已知组件,则没有组件的记录不正确,是吗?

delete parts
from    parts 
    inner join parts selff 
        on parts.Part_no = selff.Part_no 
            and selff.Component_Part_No is not null
where   parts.Component_Part_No is null
于 2012-11-14T12:11:20.817 回答
0
DECLARE @tab TABLE(Part_No INT,Component_Part_No INT,Location VARCHAR(3))
INSERT INTO @tab
SELECT 12345,NULL,'001' UNION ALL
SELECT 50001,NULL,'001' UNION ALL
SELECT 50001,4001,'001' UNION ALL
SELECT 50001,4001,'001' UNION ALL
SELECT 11111,NULL,'001' UNION ALL
SELECT 11111,5001,'002' UNION ALL
SELECT 22222,NULL,'003' UNION ALL
SELECT 22222,6001,'003' UNION ALL
SELECT 33333,NULL,'003'

SELECT * FROM @tab;

DELETE 
FROM @tab
Part_No IN 
(
SELECT Part_No 
FROM @tab
GROUP BY Part_No
HAVING COUNT(*) > 1
)
AND [@tab].Component_Part_No IS NULL

SELECT * FROM @tab;

SQL 小提琴 - http://sqlfiddle.com/#!3/613c1/1

于 2012-11-12T18:16:14.580 回答