基于另一列中的两列从一个表中删除

时间:2012-08-21 21:38:47

标签: sql sybase-ase

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

... ADD 我用@ john的建议作为起点。当我测试select时,它会选择我需要的行。

    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

中删除的select中的列表中只有行

3 个答案:

答案 0 :(得分:2)

这只是DELETE #tempDBDELETE *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)

答案 1 :(得分:2)

试试这个:

DELETE FROM #tempB
WHERE id_cd IN 
    (SELECT a.id_cd
     FROM #tempB b, tempA a
     where b.style_cd = a.style_cd)

答案 2 :(得分: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)并用它来进行删除。我仍然需要测试它,但到目前为止....它的工作原理。 感谢所有的推动。