別の両方の値に基づいて、一時テーブルの値を削除する必要があります。つまり、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から削除された選択のリストから行だけを取得していません