Evi*_*aid 28 t-sql sql-server visual-studio
我有两个表关系,我想更新表A中的字段.是否可以在同一个查询中组合更新和连接?我用Google搜索但没有找到任何有效的解决方案?
UPDATE md SET md.status = '3'
FROM pd_mounting_details AS md
LEFT OUTER JOIN pd_order_ecolid AS oe ON md.order_data = oe.id
Run Code Online (Sandbox Code Playgroud)
我正在使用MS SQL
Jon*_*onH 56
Update t
SET
t.Column1=100
FROM
myTableA t
LEFT JOIN
myTableB t2
ON
t2.ID=t.ID
Run Code Online (Sandbox Code Playgroud)
替换myTableA
为您的表名称并替换Column1
为您的列名称.在此之后只需LEFT JOIN到tableB. t
在这种情况下只是一个别名myTableA
如果您需要的是SELECT语句的UPDATE,您可以执行以下操作:
UPDATE suppliers
SET city = (SELECT customers.city FROM customers
WHERE customers.customer_name = suppliers.supplier_name)
Run Code Online (Sandbox Code Playgroud)
在MySQL的SET
条款需要拿出后的JOIN
。例子:
UPDATE e
LEFT JOIN a ON a.id = e.aid
SET e.id = 2
WHERE
e.type = 'user' AND
a.country = 'US';
Run Code Online (Sandbox Code Playgroud)
另一个示例是将表1中的列值插入表2中的列:
UPDATE Address
SET Phone1 = sp.Phone
FROM Address ad LEFT JOIN Speaker sp
ON sp.AddressID = ad.ID
WHERE sp.Phone <> ''
Run Code Online (Sandbox Code Playgroud)
此查询中的左连接毫无意义:
UPDATE md SET md.status = '3'
FROM pd_mounting_details AS md
LEFT OUTER JOIN pd_order_ecolid AS oe ON md.order_data = oe.id
Run Code Online (Sandbox Code Playgroud)
它将更新 的所有行pd_mounting_details
,无论 中是否存在匹配的行pd_order_ecolid
。如果您只想更新匹配的行,那么它应该是内部联接。
如果您想根据连接是否发生来应用某些条件,则需要在子句中添加WHERE
子句和/或表达式。CASE
SET