比较难的问题sql双表遍历问题.....

xnfriday 2010-10-24 12:38:22
现在有两张表table1,和table2,table1只有字段A,table2有字段B和一个字段C

字段A和字段B数据类型是一样的

现在想在table2的字段C中插入数值,如果

字段B在字段A中存在相同的值,字段C的值为0

字段B有这个值,而字段A没有这个值,字段C的值为1

字段A有这个值,而字段B没有这个值,字段C的值为2

可能说点有点不明白

其实就是表1,表2两表,如果表1的某一个字段有某一个值,表2中没有相应的字段没有,就在表2中的另外一个字段标示一下

就这样

请问有没有高手提示一下,如果有sql语句就更好了

非常感谢...

...全文
64 6 点赞 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xnfriday 2010-10-24
你声明的id是要查找的,并不是给定的...

[Quote=引用 4 楼 abuying 的回复:]
字段B在字段A中存在相同的值,字段C的值为0

字段B有这个值,而字段A没有这个值,字段C的值为1

字段A有这个值,而字段B没有这个值,字段C的值为2


SQL code
declare @id int
set @id=12--设置插入值
update tb2 set c=(case when exists(select 1 from tb where a=@id) and……
[/Quote]
  • 打赏
  • 举报
回复
xnfriday 2010-10-24
table1是没有字段C的,只有字段A

您的那种方法应该是要求table1需要字段A吧??

[Quote=引用 3 楼 shizheyangde 的回复:]
1.字段B在字段A中存在相同的值,字段C的值为0
2.字段B有这个值,而字段A没有这个值,字段C的值为1
3.字段A有这个值,而字段B没有这个值,字段C的值为2

以上条件中,条件1是没有问题的;条件2和条件3是矛盾的,可以有两种理解:
第一种理解是,两个条件是等价的,也就是说c字段要么是1要么是2,c字段不会同时出现1和2,这样sql语句为:

SQL code

update……
[/Quote]
  • 打赏
  • 举报
回复
abuying 2010-10-24
字段B在字段A中存在相同的值,字段C的值为0

字段B有这个值,而字段A没有这个值,字段C的值为1

字段A有这个值,而字段B没有这个值,字段C的值为2

declare @id int
set @id=12--设置插入值
update tb2 set c=(case when exists(select 1 from tb where a=@id) and exists(select 1 from tb2 where b=@id) then 0 when not exists(select 1 from tb where a=@id) and exists(select 1 from tb2 where b=@id) then 1 when exists(select 1 from tb where a=@id) and not exists(select 1 from tb2 where b=@id) then 2 end )
  • 打赏
  • 举报
回复
shizheyangde 2010-10-24
1.字段B在字段A中存在相同的值,字段C的值为0
2.字段B有这个值,而字段A没有这个值,字段C的值为1
3.字段A有这个值,而字段B没有这个值,字段C的值为2

以上条件中,条件1是没有问题的;条件2和条件3是矛盾的,可以有两种理解:
第一种理解是,两个条件是等价的,也就是说c字段要么是1要么是2,c字段不会同时出现1和2,这样sql语句为:

update tb2
set c = (case when exists (select 1 from tb1 where tb1.a = tb2.b) then 0 else 1 end)
from tb2

第二种理解是:正常理解条件2,而对于条件3,则是:“在table2中添加一条数据,字段b为table1的字段a,字段c为数值2”,sql语句为:

update tb2
set c = (case when exists (select 1 from tb1 where tb1.a = tb2.b) then 0 else 1 end)
from tb2

insert into tb2
select A,2
from(
select a from tb1 except select b from tb2
) t


  • 打赏
  • 举报
回复
xnfriday 2010-10-24
情况应该有三种的,而不是存在不存在两种...

字段A中存在,B中不存在和字段B中存在,A中不存在是两种更不一样的情况..

代码只区分了两种情况

非常感谢您的回答...

[Quote=引用楼主 xnfriday 的回复:]
现在有两张表table1,和table2,table1只有字段A,table2有字段B和一个字段C

字段A和字段B数据类型是一样的

现在想在table2的字段C中插入数值,如果

字段B在字段A中存在相同的值,字段C的值为0

字段B有这个值,而字段A没有这个值,字段C的值为1

字段A有这个值,而字段B没有这个值,字段C的值为2

可能说点有点不明白

其实就是表……
[/Quote]
  • 打赏
  • 举报
回复
dawugui 2010-10-24
字段B在字段A中存在相同的值,字段C的值为0

字段B有这个值,而字段A没有这个值,字段C的值为1

字段A有这个值,而字段B没有这个值,字段C的值为2

--?

字段B有这个值,而字段A没有这个值,字段C的值为1

字段A有这个值,而字段B没有这个值,字段C的值为2

这两个条件其实是一个条件.

update tb2
set c = (case when exists (select 1 from tb1 where tb1.a = tb2.b) then 0 else 1 end)
from tb2
  • 打赏
  • 举报
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-10-24 12:38
社区公告
暂无公告