Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Update和left外部联接语句_Sql Server_Visual Studio_Tsql - Fatal编程技术网

Sql server Update和left外部联接语句

Sql server Update和left外部联接语句,sql-server,visual-studio,tsql,Sql Server,Visual Studio,Tsql,我有两个带关系的选项卡,我想更新表a中的一个字段。是否可以在同一个查询中合并update和join?我在谷歌上搜索了一下,但没有找到任何有效的解决方案 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 我正在使用MS SQL Update t SET t.Column1=100

我有两个带关系的选项卡,我想更新表a中的一个字段。是否可以在同一个查询中合并update和join?我在谷歌上搜索了一下,但没有找到任何有效的解决方案

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
我正在使用MS SQL

Update t 
SET 
       t.Column1=100
FROM 
       myTableA t 
LEFT JOIN 
       myTableB t2 
ON 
       t2.ID=t.ID
用表名替换
myTableA
,用列名替换
Column1


在此之后,只需离开连接表B即可
t
在本例中只是
myTableA
的别名
t2
是联接表的别名,在我的示例中是
myTableB
。如果您不喜欢使用
t
t2
使用任何您喜欢的别名-没关系-我只是碰巧喜欢使用这些别名。

如果您需要的是从SELECT语句更新,您可以这样做:

UPDATE suppliers    
SET city = (SELECT customers.city FROM customers

WHERE customers.customer_name = suppliers.supplier_name)

此查询中的左连接没有意义:

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
它将更新
pd\u mounting\u details
的所有行,无论
pd\u order\u ecolid
中是否存在匹配行。如果您只想更新匹配的行,那么它应该是一个内部联接


如果要基于连接是否发生应用某些条件,则需要在
SET
子句中添加
WHERE
子句和/或
CASE
表达式。

这只是将表1中的列的值插入表2中的列的另一个示例:

UPDATE  Address
SET     Phone1 = sp.Phone
FROM    Address ad LEFT JOIN Speaker sp
ON      sp.AddressID = ad.ID
WHERE   sp.Phone <> '' 
更新地址
设置电话1=sp.电话
从地址ad左连接扬声器sp
在sp.AddressID=ad.ID上
sp.电话“”的位置

在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';

好的,这就是我所尝试的:像这样:
UPDATE md SET md.status='3'FROM pd_mounting_details AS md LEFT加入pd_order_ecolid AS oe ON md.order_data=oe.id
@Evilaid-我已将此代码添加到问题中。回答这个问题会有帮助。@Evailaid只要订单数据与oe的id类型相同,我就看不出有问题。应该是pd\U挂载\U详细信息吗(添加下划线)?还请注意,如果您使用的是“3”,而不是pd_order_ecolid中的值,则这与不使用联接进行更新相同。也许您希望使用内部联接或“WHERE oe.IS NOT NULL”?外部联接版本毫无意义,因为每一行都将被更新。内部联接版本是不必要的-EXISTS子查询实现了相同的功能(与错误的联接语法不同,EXISTS是标准SQL)添加该代码表示错误,您要交叉连接到什么?@JohnH抱歉,交叉连接不存在,visual studio出于某种原因自动添加该代码。请接受答案…这是最合适的答案。