Обновление и удаление внешних операторов соединения
У меня есть две таблицы с отношением, и я хочу обновить поле в таблице 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
Ответы
Ответ 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';