Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:使用多列进行重复检查_Sql_Sql Server 2005_Insert_Duplicates - Fatal编程技术网

SQL:使用多列进行重复检查

SQL:使用多列进行重复检查,sql,sql-server-2005,insert,duplicates,Sql,Sql Server 2005,Insert,Duplicates,我必须做一个决定: INSERT INTO aaa(DateFrom, DateTo) SELECT DateFrom, DateTo FROM bbb 但有时aaa中已经存在此日期间隔 如果该日期间隔已经存在,我应该如何将WHERE添加到SELECT中,以避免在aaa中插入 我的问题是:如果我添加以下内容: WHERE bbb.DateFrom NOT IN aaa.DateFrom AND bbb.DateTo NOT IN aaa.DateTo 这不会同时检查两个日期(间隔),但“Fr

我必须做一个决定:

INSERT INTO aaa(DateFrom, DateTo)
SELECT DateFrom, DateTo FROM bbb
但有时aaa中已经存在此日期间隔

如果该日期间隔已经存在,我应该如何将WHERE添加到SELECT中,以避免在aaa中插入

我的问题是:如果我添加以下内容:

WHERE bbb.DateFrom NOT IN aaa.DateFrom AND bbb.DateTo NOT IN aaa.DateTo

这不会同时检查两个日期(间隔),但“From”或“To”日期似乎只需将“AND”改为“or”并添加嵌套的select语句即可

WHERE bbb.DateFrom NOT IN (select aaa.DateFrom from aaa) AND bbb.DateTo NOT IN (select aaa.DateTo from aaa)

看起来您需要做的就是将“AND”改为“OR”,并添加嵌套的select语句

WHERE bbb.DateFrom NOT IN (select aaa.DateFrom from aaa) AND bbb.DateTo NOT IN (select aaa.DateTo from aaa)
你的插页很好

插入@aaa(日期从,日期到) 选择b.DateFrom,b.DateTo FROM@bbb b

您需要去掉现有的WHERE子句,改为执行左连接

在a.DateFrom上左键加入@aaa a= b、 DateFrom和a.DateTo=b.DateTo

然后,您可以将其与新的WHERE子句结合起来,以测试第二个表中是否缺少条目:

其中ISNULL(a.DateFrom,,)=

瞧,你有你的疑问了

完整工作示例如下:

声明@aaa表(日期从 日期时间,日期到日期时间)

插入@aaa(日期从,日期到) 价值(“2011年1月1日”、“2011年1月31日”) 插入@aaa(日期从,日期到) 价值(“2011年3月1日”、“2011年3月15日”)

从@aaa中选择*

声明@bbb表(日期从 日期时间,日期到日期时间)

插入到@bbb(DateFrom,DateTo) 价值(“2011年1月1日”、“2011年1月31日”) 插入到@bbb(DateFrom,DateTo) 价值(“2011年3月1日”、“2011年3月16日”) 插入到@bbb(DateFrom,DateTo) 价值(“2011年2月1日”、“2011年6月3日”)

从@bbb中选择*

插入@aaa(日期从,日期到) 选择b.DateFrom,b.DateTo FROM@bbb b在a.DateFrom上左加入@aaa a= b、 DateFrom和a.DateTo=b.DateTo 其中ISNULL(a.DateFrom,,)=

从@aaa中选择*

你的插页很好

插入@aaa(日期从,日期到) 选择b.DateFrom,b.DateTo FROM@bbb b

您需要去掉现有的WHERE子句,改为执行左连接

在a.DateFrom上左键加入@aaa a= b、 DateFrom和a.DateTo=b.DateTo

然后,您可以将其与新的WHERE子句结合起来,以测试第二个表中是否缺少条目:

其中ISNULL(a.DateFrom,,)=

瞧,你有你的疑问了

完整工作示例如下:

声明@aaa表(日期从 日期时间,日期到日期时间)

插入@aaa(日期从,日期到) 价值(“2011年1月1日”、“2011年1月31日”) 插入@aaa(日期从,日期到) 价值(“2011年3月1日”、“2011年3月15日”)

从@aaa中选择*

声明@bbb表(日期从 日期时间,日期到日期时间)

插入到@bbb(DateFrom,DateTo) 价值(“2011年1月1日”、“2011年1月31日”) 插入到@bbb(DateFrom,DateTo) 价值(“2011年3月1日”、“2011年3月16日”) 插入到@bbb(DateFrom,DateTo) 价值(“2011年2月1日”、“2011年6月3日”)

从@bbb中选择*

插入@aaa(日期从,日期到) 选择b.DateFrom,b.DateTo FROM@bbb b在a.DateFrom上左加入@aaa a= b、 DateFrom和a.DateTo=b.DateTo 其中ISNULL(a.DateFrom,,)=

从@aaa中选择*


这不是检查间隔,如果有一条记录具有相同的DateFrom和不同的DatTo。。。明白我的意思吗?我不认为我理解你的问题…即使现在我也不确定。很高兴你找到了答案。这不是检查间隔,如果有一条记录的日期从相同到不同。。。明白我的意思吗?我不认为我理解你的问题…即使现在我也不确定。很高兴你找到了答案。