10

ではSQL Server、次のようなことができます。

UPDATE tbl1 
   SET col2 = tbl2.col2 
  FROM table1 tbl1 
 INNER JOIN table2 tbl2 
    ON tbl1.col1 = tbl2.col1

これが SQL 標準の一部であるかどうかを調べようとはしませんでした。他の方法もあると思いますが、驚くほど便利です。

これが私の問題です。SQLITE3 を使用して、SQL (つまり、ホスト言語ではない) で同様のことを行う必要があります。それはできますか?

4

4 に答える 4

23

これはsqliteで機能します:

UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1)
于 2010-03-24T17:24:20.407 に答える
4

Geogory Higleyの投稿を強調するためだけに:

UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1)tbl2に存在しないtbl1の列を更新する場所に問題がありました。

http://sqlite.phxsoftware.com/forums/p/1708/7238.aspxのチーターの投稿を参照してください。

http://www.mail-archive.com/sqlite-users@sqlite.org/msg27207.html

コードは次のとおりです。

insert or replace into foo (id, name, extra)
select bar.id, bar.name, foo.extra
  from bar 
  left join foo 
    on bar.id = foo.id;

これは正しく機能しているようです。さまざまなサイトに最初のアプローチを推奨する投稿がたくさんあるようですので、少し混乱します。この方法を使用する場合は、出力を慎重にテストすることをお勧めします。この方法は、より高速に見え、一致するテーブルで機能する可能性があります。

于 2013-01-01T21:03:00.497 に答える
1

価値のあることとして、Microsoft SQL Server と MySQL は複数テーブルの更新をサポートする唯一のデータベース ブランドであり、それぞれが使用する構文は似ていません。

この機能は、標準 SQL の一部ではありません。したがって、複数テーブルの更新 (および削除) のサポートが非標準であり、多くのブランドでサポートされていないことは驚くべきことではありません。

とにかく、あなたの仕事に合った解決策を見つけてよかったです。

于 2008-11-30T21:37:51.777 に答える
1

これは で実行できることがわかりましたINSERT OR REPLACE INTO。T-SQL の同等のものよりも少し冗長ですが、同じくらい便利です。

于 2008-11-30T19:22:16.417 に答える