2011-05-27 32 views
1

我在数据库中有两个表,我需要从一个表中选择一个字段,并使用id相同的条件在另一个表中更新它。是否可以在单个查询中写入? ?在单个查询中多个查询写入

+0

你能不能给我们你所谈论的表和字段的详细信息?你能举个例子吗? – pintxo 2011-05-27 07:43:25

+0

第一个表名是寄存器...第二个表表名是存储器。现在我想更新从寄存器到存储的字段电子邮件的所有值... – 2011-05-27 07:44:16

回答

8

这应该为你工作:

update storage 
    set storage.email = (select register.email 
          from register 
          where register.id = storage.id) 
+1

thnx ...它的工作原理/ .. – 2011-05-27 07:53:40

+1

+1标准SQL-92,因此非常便携。 – onedaywhen 2011-05-27 08:19:52

+1

+1了解问题! – MatBailie 2011-05-27 09:18:09

2

啊这是,例如,您可以这样做:

UPDATE Origin SET DesiredColumn = NewValue 
FROM Origin 
JOIN NewTable ON Origin.Id = NewTable.Id 

猜列名就像在更新表DesiredColumnNewValue在该表包含new value

+2

使用子查询有什么好处?它是平台独立的吗? – Alterlife 2011-05-27 07:53:54

+0

我想这是平台独立,因为我在这里发现它 http://www.paragoncorporation.com/ArticleDetail.aspx?ArticleID=27 和关于性能,我想它没有任何影响最新的数据库系统。 – Mentor 2011-05-27 07:59:00

+0

好的...谢谢! – Alterlife 2011-05-27 08:20:09

-1

是的,这是可能的,虽然语法取决于您使用的SQL类型。

这里是T-SQL的例子(用于Microsoft SQL Server)

UPDATE 
    S 
SET 
    Email = R.Email 
FROM 
    dbo.Register R 
INNER JOIN dbo.Storage S 
    ON S.RegisterID = R.RegisterID 
+1

尽管您发布的语法取决于SQL产品,但对于所有SQL语法而言并非如此。这就是我们拥有SQL标准的原因。我可以使用标准子查询(大多数SQL产品支持)和标准SQL-99使用MERGE(许多SQL产品支持,包括SQL Server,Oracle和PostgreSQL)将语法重写为标准SQL-92。 – onedaywhen 2011-05-27 08:16:48