我需要根据另一个临时表中的两个值删除临时表中的值。换句话说,我不希望在 B 中留下任何 item_desc 用于在 A 中列出 style_cd 的 id。
#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,我想从 B 中删除项目 2 的两个条目。每个项目可以有多个与之关联的样式。一个 id 通常只有一种样式与之关联,但可以想象有多种样式。
我一定遇到了障碍,因为这似乎并不复杂。我已经为此工作了两天,除了删除所有行之外什么都没有。我一直在尝试以下方式:
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 中删除的选择中获取列表中的行