我需要根据另一个值中的两个值删除临时表中的值。换句话说,我不希望在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中的列表中只有行答案 0 :(得分: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)
答案 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)并用它来进行删除。我仍然需要测试它,但到目前为止....它的工作原理。 感谢所有的推动。