50分求高手帮忙
有两个表,一个表A的数据项是 AID AData Time,其中AID是主键,AData是字符串格式如"123;456;345;765;",另一个表B的数据项BID BData AID ,其中BData的格式为AData中的一个子项如 "765 ",A,B表没有建立联接关系,我现在想在B表中删除这样的记录,符合A表中时间约束(比如Time <2007-8-1)并且AData的分号的个数大于3个,并且BData的数据内容位于AData数据项的后面部分的一个(第三个分号后面的数据部分,分号不考虑)
表A AID AData Time
1 “1;2;3;4;5;6;” 2007-7-5
2 “234;1234;6785;1258;”2007-7-6
表B AID BData
1 “1”
1 “4”
2 “1258”
2 “6785”
注意AData 是VARCHAR
BData 是INT
我现在已经实现了从A表中删除多余分号信息,更新后的A表是
表A AID AData Time
1 “1;2;3;” 2007-7-5
2 “234;1234;6785;”2007-7-6
但是当我想在B表中搜索那些已经在A表ADATA中删除的数据的记录时,总是搜索到整个B表
我用了这个语句
SELECT *
FROM B
WHERE STR(B.BData) IN
(SELECT B.Bdata
FROM A
WHERE
CHARINDEX(STR(B.Bdata),A.AData)> 0
)
请高手帮忙啊
绝对给分
------解决方案--------------------OH! NO!
delete B.* from B, A where B.AID = A.AID and charindex(str(B.BData), A.AData) = 0
------解决方案--------------------不要用str,改為
Delete B From A, B Where B.AID = A.AID And Charindex(Cast(B.BData As Varchar), A.AData) = 0
另外,有處小筆誤
------解决方案-------------------- --這樣更保險
--如果是全角符號
Delete B From A, B Where B.AID = A.AID And Charindex( '; ' + Cast(B.BData As Varchar) + '; ', '; ' + A.AData + '; ') = 0
--如果是半角符號
Delete B From A, B Where B.AID = A.AID And Charindex( '; ' + Cast(B.BData As Varchar) + '; ', '; ' + A.AData + '; ') = 0