个多表查询出bug.如何解决.

sqz10200 2012-07-06 03:43:44
我要做手机号码在系统内的唯一性验证.
使用SQL如下



当文本框输入的值没有发生变化的时候
我用这个sql查出的结果是sum==1

如果是1程序会认为系统内已经有了这个手机号码,所以无法进行更新操作.


-----------------------
并且注册用户的时候使用的验证也是这个sql.
注册时候如果sum==0的话就说明系统内没有这个手机号码.
-----------------------
程序里就判断了是否大于0来返回bool值.

所以我觉得这个sql

在更新资料和注册的时候存在冲突.

我不知道该如何去修改.
...全文
120 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
筱筱澄 2012-07-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

因为更新和注册都是用是一个验证方法
注册时候返回0才能注册
更新的时候应该是除了自己除外的其他数据中不存在就可以修改才对.
但是在查询的时候没能把自己除外
所以在做更新提交的时候如果没有修改过手机号码的话这个返回的是1
如果是1的话表明系统内存在所以无法更新.

如果sql里能把自己排除在外查询的话就可以了.
[/Quote]

这话怎么理解,存在了为什么无法更新,你不是设置的存在了可以更新。
好像没有问题啊。。。。

当时1的时候已经存在了啊, 所以可以更新啊。
不是1的时候可以插入啊。
  • 打赏
  • 举报
回复
你更新的时候需要实现这个号码的跟心,引用表的数据也同时更新。写个触发器或者设置为主外键,实现级联更新删除。

注册的时候直接检测就是了
AcHerat 元老 2012-07-06
  • 打赏
  • 举报
回复
在修改的时候加个条件,可以确定这个手机号是谁使用的。

where a.mobile = '1234' and 用户 <> 'Tom'

把 Tom 除外,看有没有 1234 手机号的,没有的话就更新。
一般来说更新不是这样判断的,在插入的时候判断手机号是否重复,在更新的时候判断更新的号码是否重复,这样两步应该就可以了。
sqz10200 2012-07-06
  • 打赏
  • 举报
回复
对啊
返回1和返回count(*)

实际上都一样的
  • 打赏
  • 举报
回复
验证为什么不写个存储过程??
if exists(select 1 from tba where col='1231')and exists(select 1 from tbb where col ='1231')
begin
。。。。。
end

AcHerat 元老 2012-07-06
  • 打赏
  • 举报
回复
那你加个条件 where a.mobile = '1234' and 用户 = '...'
sqz10200 2012-07-06
  • 打赏
  • 举报
回复
因为更新和注册都是用是一个验证方法
注册时候返回0才能注册
更新的时候应该是除了自己除外的其他数据中不存在就可以修改才对.
但是在查询的时候没能把自己除外
所以在做更新提交的时候如果没有修改过手机号码的话这个返回的是1
如果是1的话表明系统内存在所以无法更新.

如果sql里能把自己排除在外查询的话就可以了.
筱筱澄 2012-07-06
  • 打赏
  • 举报
回复
看不到图。。。
AcHerat 元老 2012-07-06
  • 打赏
  • 举报
回复
没明白。。。

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧