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」に存在する場合にのみ、books テーブルに挿入します。それ以外の場合は、「booknotfound」テーブルに挿入します。上記のクエリは、books テーブルにレコードを挿入しますが、「booknotfound」テーブルには挿入しません。私がやりたいことは、「mytable2」の各レコードの bookid を探していることです。この方法は可能ですか?

4

1 に答える 1

2

あなたが書いたこと/書いたことを期待していること以外のことをしようとしていると思います。(私は推測します)。

チェックしているのは、インターレーションの各行ではなく、一度にすべての本です。SQL はデータのセット (単一の行または複数の行) で動作することに注意してください。

だからあなたがしていることは尋ねている

これが 1 を返す場合

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

次に、Library のすべての要素を Books に挿入します。

0 が返された場合は、Library のすべての要素を Books not found に挿入します。

あなたが求めているのは、カーソルベースの操作を実行するか (お勧めできません)、次のような 2 つの異なるセットごとの操作を実行することです。

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

ライブラリと「mytable」および「mytable2」との間のリンクが表示されないため、WHERE句の詳細をあなたが書いたものから推測するのは困難です(情報が不足していますか?)

私の推測では、mytable のライブラリにない本は not found に入れ、ライブラリにある本は本にすべきだと思いますか?

于 2013-10-24T08:51:33.797 に答える