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 値を持つ行を DELETE できるようにしたいが、パーツ番号 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 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 に答える
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 に答える
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 に答える