0

我需要根据另一个临时表中的两个值删除临时表中的值。换句话说,我不希望在 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 中删除的选择中获取列表中的行

4

3 回答 3

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 回答
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 回答
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

我在#tempB 中添加了一个标识列(rowindex)并用它来进行删除。我仍然必须对其进行测试,但到目前为止....它有效。感谢所有的轻推。

于 2012-08-23T22:14:08.017 回答