比较难的问题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语句就更好了

非常感谢...

...全文
120 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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