0

別の両方の値に基づいて、一時テーブルの値を削除する必要があります。つまり、A にリストされている style_cd を持つ ID に対して、B に item_desc を残したくありません。

#tempA
style_cd char(3),
id_cd varchar(15)

いくつかのサンプル値は次のようなものです:

A, 123456
A, 654321
B, 321456
A, 654123
C, 424242

.

#tempB
item_desc varchar(50),
item_num char(4),
style_cd char(3),
id_cd varchar(15)

このテーブルのサンプル値:

item 1,  7, A, 123456
item 2, 14, B, 123456 
item 2, 14, A, 123456
item 3, 23, A, 123456
....snip....
item 2, 14, B, 654321
item 2, 14, A, 654321
item 6, 44, A, 654321

たとえば、ID 123456 の場合、アイテム 2 の両方のエントリを B から削除したいと考えています。各アイテムには、関連付けられた複数のスタイルを含めることができます。通常、ID にはスタイルが 1 つしか関連付けられていませんが、複数のスタイルが関連付けられている場合もあります。

これはそれほど複雑ではないように見えるので、ブロックに遭遇しているに違いありません。私はこれに2日間取り組んできましたが、すべての行を削除することしかできません。私は次の行に沿って何かを試してきました:

DELETE #tempB
WHERE style_cd IN 
    (SELECT style_cd
     FROM #tempB b JOIN tempA a
     ON b.id_cd = a.id_cd
     AND b.style_cd = a.style_cd)

もちろん、これによりすべての行が削除され、表 A の id にリストされている style_cd 値に関連付けられた行のみを削除する方法を一生理解することはできません。私の悲惨さから!

Sybase ASE 15.0.2 を使用しています

追加... @johnの提案を出発点として使用しました。選択をテストすると、必要な行が選択されます。

    SELECT a.style_cd
    FROM #tempB b
      JOIN #tempA a
      ON a.id_cd = b.id_cd
      AND a.style_cd = b.style_cd 

Delete 句を追加すると、すべてが消去されます

DELETE FROM #tempB
WHERE style_cd IN 
(SELECT style_cd
 FROM #tempB b JOIN tempA a
 ON b.id_cd = a.id_cd
 AND b.style_cd = a.style_cd)

どういうわけか、tempBから削除された選択のリストから行だけを取得していません

4

3 に答える 3

2

これを試して:

DELETE FROM #tempB
WHERE id_cd IN 
    (SELECT a.id_cd
     FROM #tempB b, tempA a
     where b.style_cd = a.style_cd)
于 2012-08-22T08:10:32.400 に答える
2

DELETE #tempDBとの間の単純な混同ですDELETE *FROM* #tempDB

次のように変更した同じクエリを試してください。

DELETE FROM #tempB
WHERE style_cd IN 
    (SELECT style_cd
     FROM #tempB b JOIN tempA a
     ON b.id_cd = a.id_cd
     AND b.style_cd = a.style_cd)
于 2012-08-21T22:00:14.760 に答える
0

これが最終的に機能したものです...

    SELECT a.style_cd, item_desc,rowindex
    into #deltable
    FROM #tempB b
      JOIN #tempA a
      ON a.id_cd = b.id_cd 
      AND a.style_cd = b.style_cd


delete from #tempB
where rowindex in
(select rowindex from #deltable)



delete from #tempB
where item_desc in(
select b.item_desc
from #tableB a
join #deltable b
on a.item_desc= b.item_desc

ID 列 (rowindex) を #tempB に追加し、それを使用して削除を行いました。私はまだそれをテストする必要がありますが、これまでのところ....動作します。すべてのナッジに感謝します。

于 2012-08-23T22:14:08.017 に答える