使用连接的 SQL 更新查询
我必须使用 3 个表的联接返回的值来更新字段。
示例:
select
im.itemid
,im.sku as iSku
,gm.SKU as GSKU
,mm.ManufacturerId as ManuId
,mm.ManufacturerName
,im.mf_item_number
,mm.ManufacturerID
from
item_master im, group_master gm, Manufacturer_Master mm
where
im.mf_item_number like 'STA%'
and im.sku=gm.sku
and gm.ManufacturerID = mm.ManufacturerID
and gm.manufacturerID=34
我想使用在上述条件中连接的其他值来更新表 item_master
的 mf_item_number
字段值。
我如何在 MS SQL Server 中执行此操作?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(13)
为了清楚起见...
UPDATE
子句可以引用FROM
子句中指定的表别名。 所以在这种情况下im
是有效的通用示例
To make it clear... The
UPDATE
clause can refer to an table alias specified in theFROM
clause. Soim
in this case is validGeneric example
将此应用于 MySQL——
UPDATE
中没有FROM
子句,但这有效:Adapting this to MySQL -- there is no
FROM
clause inUPDATE
, but this works:最简单的方法之一是使用公共表表达式(因为您已经使用 SQL 2005):
查询执行引擎将自行确定如何更新记录。
One of the easiest way is to use a common table expression (since you're already on SQL 2005):
The query execution engine will figure out on its own how to update the record.
上面没有使用您的 sql,但这里是一个基于 join 语句更新表的示例。
Did not use your sql above but here is an example of updating a table based on a join statement.
您可以使用 UPDATE 语句中的“FROM”子句指定用于确定更新方式和更新内容的附加表,如下所示:
在 WHERE 子句中,您需要提供条件和联接操作以将这些表绑定在一起。
马克
You can specify additional tables used in determining how and what to update with the "FROM " clause in the UPDATE statement, like this:
In the WHERE clause, you need to provide the conditions and join operations to bind these tables together.
Marc
MySQL:一般来说,根据您的要求进行必要的更改:
MySQL: In general, make necessary changes par your requirement:
在 SQL 中使用连接查询进行更新非常简单。您可以不使用 使用
FROM
子句来进行更新。 这是一个例子:It is very simple to update using join query in SQL .You can do it without using
FROM
clause. Here is an example :您可以使用以下查询:
You can use the following query:
如果您使用的是 SQL Server,则可以从另一个表更新一个表,而无需指定联接,只需从 where 子句链接两个表即可。 这使得 SQL 查询更加简单:
If you are using SQL Server you can update one table from other table without specifying a join and simply link the two tables from the where clause. This makes a much simpler SQL query:
尝试这样...
Try like this...
您可以使用
MERGE
对MATCHED
和NOT MATCHED
进行更多控制的命令:(我稍微更改了源代码以证明我的观点)You can update with
MERGE
Command with much more control overMATCHED
andNOT MATCHED
:(I slightly changed the source code to demonstrate my point)让我对所有现有答案添加一个警告:
当使用 SELECT ... FROM 语法时,您应该记住它是 T-SQL 的专有语法,并且是非确定性的。 最糟糕的是,你没有收到任何警告或错误,它只是顺利执行。
带有示例的完整说明位于 文档:
Let me just add a warning to all the existing answers:
When using the SELECT ... FROM syntax, you should keep in mind that it is proprietary syntax for T-SQL and is non-deterministic. The worst part is, that you get no warning or error, it just executes smoothly.
Full explanation with example is in the documentation:
我一直在尝试做这样的事情,我突然想到尝试使用以下语法(使用元组)
并且令人惊讶的是它有效。 我正在使用 Oracle(我认为是 12c)。 这个标准 SQL 或 Oracle 特定吗?
注意:在我的示例中,我正在更新整个表(填充新列)。 更新没有 where 子句,因此所有行都将被更新。 当子查询不返回行时,您的字段将设置为 NULL。 (并且它不能返回超过一行)。
I've been trying to do things like this forever and it just occurred to me to try using the following syntax (using tuples)
And surprisingly it worked. I'm using Oracle (12c I think). Is this standard SQL or Oracle specific?
NB: In my example I'm updating the entire table (filling new columns). The update has no where clause so all rows will be updated. Your fields will be set to NULL when the subquery doesn't return a row. (and it must not return more than one row).