Подтвердить что ты не робот

Обновление и удаление внешних операторов соединения

У меня есть две таблицы с отношением, и я хочу обновить поле в таблице A. Возможно ли объединить обновление и присоединиться к одному и тому же запросу? Я googled, но не нашел никакого рабочего решения?

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

4b9b3361

Ответ 1

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

Замените myTableA своим именем таблицы и замените Column1 на название столбца. После этого просто LEFT JOIN в tableB. t в этом случае является просто псевдонимом для myTableA

Ответ 2

Если вам нужно UPDATE из инструкции SELECT, вы можете сделать что-то вроде этого:

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

WHERE customers.customer_name = suppliers.supplier_name)

Ответ 3

Еще один пример, когда значение столбца из таблицы 1 вставляется в столбец в таблице 2:

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

Ответ 4

Левое соединение в этом запросе бессмысленно:

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. Если вы хотите только обновлять соответствующие строки, это должно быть внутреннее соединение.

Если вы хотите применить какое-либо условие на основе происходящего или нет, вам нужно добавить предложение WHERE и/или выражение CASE в предложение SET.

Ответ 5

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