2011-06-13 65 views
20

我有兩個具有關係的表格,我想更新表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 

我使用MS SQL

+0

添加該代碼的指示錯誤,什麼是你穿越到加盟? – JonH 2011-06-13 19:55:13

+0

@JohnH對不起,交叉連接不在那裏,視覺工作室因爲某些原因自動添加了這個.. – Evilaid 2011-06-13 20:01:27

+0

請接受一個答案... – JonH 2018-01-24 17:40:59

回答

38
Update t 
SET 
     t.Column1=100 
FROM 
     myTableA t 
LEFT JOIN 
     myTableB t2 
ON 
     t2.ID=t.ID 

替換myTableA您的表名和與你的列名替換Column1。 在此之後,簡單地左連接到tableB。 t在這種情況下,僅僅是myTableA

+0

好吧,那就是我試過的:像這樣:'UPDATE md SET md .status ='3'FROM pd_mounting_details AS md LEFT JOIN pd_order_ecolid AS oe ON md.order_data = oe.id' – Evilaid 2011-06-13 19:47:18

+0

@Evilaid - 我已將此代碼添加到問題中。這將有助於回答它。 – 2011-06-13 19:50:51

+0

@Evailaid只要order_data是來自oe的相同類型的id比我看到沒有問題。 – JonH 2011-06-13 19:51:56

7

別名如果你需要的是從SELECT語句UPDATE,你可以做這樣的事情:

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

WHERE customers.customer_name = suppliers.supplier_name) 
1

的LEFT 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 

它會更新pd_mounting_details的所有行,無論pd_order_ecolid中是否存在匹配的行。如果你只想更新匹配的行,它應該是一個內部連接。

如果要基於發生或未發生的聯接應用某些條件,則需要在SET子句中添加WHERE子句和/或CASE表達式。

1

,其中從表1中列的值插入列在表2中又一個例子:

UPDATE Address 
SET  Phone1 = sp.Phone 
FROM Address ad LEFT JOIN Speaker sp 
ON  sp.AddressID = ad.ID 
WHERE sp.Phone <> ''