Cross-table UPDATE in SQLITE3

后端 未结 4 596
情话喂你
情话喂你 2020-12-10 04:59

In SQL Server, I can do something like this:

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


        
相关标签:
4条回答
  • 2020-12-10 05:56

    Just to emphasize Geogory Higley's post:

    I have had problems with UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1) where it updates columns in tbl1 that do not exist in tbl2.

    see cheetah post at http://sqlite.phxsoftware.com/forums/p/1708/7238.aspx which points to:

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

    The code is:

    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;
    

    and this seems to work correctly. There seem to be many posts at different sites that recommend the first approach so it is a bit confusing. I would suggest you test your output very carefully if you use this method which does seem faster and may work with matched tables.

    0 讨论(0)
  • 2020-12-10 06:00

    This works for sqlite:

    UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1)
    
    0 讨论(0)
  • 2020-12-10 06:03

    For what it's worth, Microsoft SQL Server and MySQL are the only brands of database that support multi-table updates, and the syntax each uses is not similar.

    This feature is not part of standard SQL. So it's not surprising that support for multi-table update (and delete) is nonstandard and not supported by many brands.

    Anyway, I'm glad you found a solution that works for your task.

    0 讨论(0)
  • 2020-12-10 06:05

    I've discovered this can be done with INSERT OR REPLACE INTO. A little more verbose than T-SQL's equivalent, but just as handy.

    0 讨论(0)
提交回复
热议问题