0

我的 SQL 查询如下

if exists(select 1 from mytable2 T,mytable M where T.bookid=M.bookid)
 begin
  insert into books(col1,col2)
  select col1,col2 from library
 end

else
 begin
  insert into booknotfound 
  select col1,col2 from library
end

说图书馆是一个源表。仅当 BookId 存在于“mytable”中时,我才会在 book 表中插入,否则我想插入到“booknotfound”表中。上面的查询在 books 表中插入记录,但不在“booknotfound”表中。所以我想要做的是我正在为“mytable2”中的每条记录寻找 bookid 这种方式可能吗?

4

1 回答 1

2

我认为您正在尝试做的不是您所写/期望您所写的。(我猜)。

您要检查的不是交互中的每一行,而是一次检查所有书籍。请记住,SQL 对数据集(可以是单行或多行)进行操作。

所以你在做的是问

如果返回 1

select 1 from mytable2 T,mytable M where T.bookid=M.bookid

然后将图书馆中的所有元素插入书籍。

如果返回 0,则将 Library 中的所有元素插入未找到的 Books 中。

我认为你所追求的是要么做一个基于游标的操作(不建议),要么做两个不同的集合操作,比如

INSERT col1, col2 INTO books FROM liberary WHERE <INSERT YOUR WHERE CLAUSE>
INSERT col1, col2 INTO booknotfound FROM liberary WHERE <INSERT YOUR WHERE CLAUSE>

您的 WHERE 子句的细节很难从您所写的内容中推断出来,因为我看不到库与您的“mytable”和“mytable2”之间的任何链接(您是否遗漏了一些信息?)

我的猜测是,您是在寻找 mytable 中不在图书馆中的书籍应该放入 not found 而那些在图书馆中的书籍应该在书籍中?

于 2013-10-24T08:51:33.797 回答