sql语句 条件表达式

xaqaga 2009-07-07 10:51:19
假设表中有如下字段
A(ID,B1,B2,...)
要插入记录:
A1(ID1,C1,C2,....)

需要满足条件:(B1,B2)与(C1,C2)整体不同,这个条件表达式怎么表示
...全文
312 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
十年一剑 2009-07-07
  • 打赏
  • 举报
回复
怎么删除建好的checksum() 啊……
xaqaga 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 feixianxxx 的回复:]
引用 18 楼 xaqaga 的回复:
我就执行了这一条语句,忘了说了,是用ADO向access表中追加记录 ,表里的内容是单词记录(同一个单词可能有不同解释,不同单词可能有相同解释,所以要判断两个字段)
sqlstr:='insert into DICT select*from("",'+Quotedstr(Pdict[j].name)+','+Quotedstr(Pdict[j].meaning)+','+Quotedstr(Pdict[j].spell)+',0,0,1,1,0,0,0,"","")where checksum('+Quotedstr(Pdict[j].name)+','+Quotedstr(Pdict[j].meaning)+') not in(select checksum(NAME,MEANING) from DICT';
////////////
这是按上面方法改的,delphi语法

13楼的 试过了么?
[/Quote]

谢谢这位老大,您的建议是: 一组SQL语句,据我了解,这在access中好像不行
feixianxxx 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 xaqaga 的回复:]
我就执行了这一条语句,忘了说了,是用ADO向access表中追加记录 ,表里的内容是单词记录(同一个单词可能有不同解释,不同单词可能有相同解释,所以要判断两个字段)
sqlstr:='insert into DICT select*from("",'+Quotedstr(Pdict[j].name)+','+Quotedstr(Pdict[j].meaning)+','+Quotedstr(Pdict[j].spell)+',0,0,1,1,0,0,0,"","")where checksum('+Quotedstr(Pdict[j].name)+','+Quotedstr(Pdict[j].meaning)+') not in(select checksum(NAME,MEANING) from DICT';
////////////
这是按上面方法改的,delphi语法
[/Quote]
13楼的 试过了么?
xaqaga 2009-07-07
  • 打赏
  • 举报
回复
我就执行了这一条语句,忘了说了,是用ADO向access表中追加记录 ,表里的内容是单词记录(同一个单词可能有不同解释,不同单词可能有相同解释,所以要判断两个字段)
sqlstr:='insert into DICT select*from("",'+Quotedstr(Pdict[j].name)+','+Quotedstr(Pdict[j].meaning)+','+Quotedstr(Pdict[j].spell)+',0,0,1,1,0,0,0,"","")where checksum('+Quotedstr(Pdict[j].name)+','+Quotedstr(Pdict[j].meaning)+') not in(select checksum(NAME,MEANING) from DICT';
////////////
这是按上面方法改的,delphi语法
jinjazz 2009-07-07
  • 打赏
  • 举报
回复
哪里来的join?
xaqaga 2009-07-07
  • 打赏
  • 举报
回复

insert into a select * from a1 where checksum(c1,c2) not in(select checksum(b1,b2) from a)

您的答案我试过了,提示Join 操作语法错误。我只是将a1改为记录本身:(ID,C1,C2,...)
jinjazz 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 xaqaga 的回复:]
就是:
表:A(ID,B1,B2,其他字段)

记录A1: (ID1,C1,C2,....)

要将记录A1加入表A,需要判断其中的两个字段值是否同时存在。

在这两个字段上判断:(B1,B2)
[/Quote]

这么多人的答案你试过了吗?
xaqaga 2009-07-07
  • 打赏
  • 举报
回复
就是:
表:A(ID,B1,B2,其他字段)

记录A1: (ID1,C1,C2,....)

要将记录A1加入表A,需要判断其中的两个字段值是否同时存在。

在这两个字段上判断:(B1,B2)
feixianxxx 2009-07-07
  • 打赏
  • 举报
回复
-- =========================================
-- -----------t_mac 小编-------------
---希望有天成为大虾----
-- =========================================

IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb(id int ,b1 int ,b2 int )
go
insert into tb
select 1,2,3 union all
select 2,3,4
go
select * from tb
declare @c1 int ,@c2 int ,@id int
set @c1=3 set @c2=5 set @id=3
if not exists(select 1 from tb where b1=@c1 and b2=@c2)
begin
insert tb
values(@id,@c1,@c2)
end
else print '已有相同记录,拒绝插入@'
select * from tb
/*------------
1 2 3
2 3 4

1 2 3
2 3 4
3 3 5
-------*/
--换情况
select * from tb
declare @c1 int ,@c2 int ,@id int
set @c1=3 set @c2=4 set @id=3
if not exists(select 1 from tb where b1=@c1 and b2=@c2)
begin
insert tb
values(@id,@c1,@c2)
end
else
print '已有相同记录,拒绝插入@'
select * from tb
/*------------
1 2 3
2 3 4

1 2 3
2 3 4
-------*/
ai_li7758521 2009-07-07
  • 打赏
  • 举报
回复
ai_li7758521 2009-07-07
  • 打赏
  • 举报
回复
对A表(B1,B2)添加唯一约束。
ai_li7758521 2009-07-07
  • 打赏
  • 举报
回复
看错了,更正:
INSERT A
SELECT * FROM A1 t
WHERE NOT EXISTS (SELECT * FROM A WHERE B1=t.C1 AND B2=t.C2)
playwarcraft 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xaqaga 的回复:]
A1(ID1,C1,C2,....)  这是一条记录,不是表,也可以吗?
[/Quote]

猜来猜去的,
LZ直接给出表数据,和要插入的数据
要得到什么结果
ai_li7758521 2009-07-07
  • 打赏
  • 举报
回复
INSERT A
SELECT * FROM A1 t
WHERE EXISTS (SELECT * FROM A WHERE B1<>t.C1 AND B2<>t.C2)
xaqaga 2009-07-07
  • 打赏
  • 举报
回复
A1(ID1,C1,C2,....) 这是一条记录,不是表,也可以吗?


feixianxxx 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jinjazz 的回复:]
SQL codeinsertinto aselect*from a1where checksum(c1,c2)notin(select checksum(b1,b2)from a)
[/Quote]
学习了。
playwarcraft 2009-07-07
  • 打赏
  • 举报
回复
整体不同?
htl258_Tony 2009-07-07
  • 打赏
  • 举报
回复
insert into a 
select * from a1
where not exists (
select 1
from a
where b1=a1.c1
and b2=a1.c2)
feixianxxx 2009-07-07
  • 打赏
  • 举报
回复
declare @a varchar(100),@a1 varchar(100)
set @a='a,s,d,s,e' set @a1='a,s,d,s,e'
if(select CHARINDEX(@a1,@a)>0)
begin
insert 表
values(@a1)
--小F-- 2009-07-07
  • 打赏
  • 举报
回复
用checksum做比较
insert into a select * from a1 where checksum(c1,c2) not in(select checksum(b1,b2) from a)
加载更多回复(1)

22,207

社区成员

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

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