2015-04-22 4 views
0

У меня есть 2 таблицы с информацией в них. Мне нужно обновить столбец SelfServiceUserName в таблице A_CLIENT со значением из столбца SubstVarValue таблицы A_DEV_SUBSTVAR_VALUE, когда совпадают идентификаторы ClientUID и DeviceID, а имя SubstVarName из таблицы A_DEV_SUBSTVAR_VALUE = имя samaccount. Вот запрос я пытался бежать, но я продолжаю получать ошибки:SQL Update From Where Query

UPDATE A_CLIENT 
SET SelfServiceUserName = (SELECT SubstVarValue 
    FROM A_DEV_SUBSTVAR_VALUE 
    WHERE A_DEV_SUBSTVAR_VALUE.SubstVarName = 'samaccountname') 
    WHERE A_CLIENT.ClientUID = A_DEV_SUBSTVAR_VALUE.DeviceID 
+1

записи вы ошибки –

+0

возможный дубликат [обновление SQL из одной таблицы в другую на основе матча ID] (http://stackoverflow.com/questions/224732/sql-update-from-one-table-to-another-based-on-a-id-match) –

ответ

0

попробовать что-то вроде

update a_client c 
inner join a_dev_substvar_value d on 
    c.clientuid = d.deviceid 
set 
    c.selfserviceusername = d.substvarvalue 
where 
    d.substvarname = 'samaccountname'; 

Обратите внимание, вы должны стараться избегать написания операторов выбора в вашем предложении были, потому что она запускается для возвращаемой строки. Это может быть большой успех.

Это должно сработать.

+0

Еще один момент - это ваше предложение о соединении, если 'clientuid = deviceid '? Похоже, там может быть что-то неправильное. –

+0

Спасибо. Ты меня на правильном пути. Мне просто пришлось внести некоторые изменения в синтаксис INNER JOIN. – James

0

Я всегда записываю соединение между двумя таблицами, чтобы получить строки, которые я хочу рядом друг с другом, и убедитесь, что у меня есть предложение JOIN правильно.

SELECT p.ProductID, p.ProductName, p.Price AS OldPrice, n.Price as NewPrice 
FROM Products as p 
JOIN NewPrices as n on p.ProductID = n.ProductID 

После того, как я сделал, что это легко изменить его в оператор обновления путем замены ЗЕЬЕСТА с UPDATE и SET:

UPDATE p 
SET Price = n.Price 
FROM Products as p 
JOIN NewPrices as n on p.ProductID = n.ProductID 

Примечания Вы не псевдонимом Цены слева стороне предложения SET, потому что это обязательно из таблицы p (Product), поэтому нет никакой двусмысленности. Вы должны по-прежнему иметь псевдоним цены справа от равных, поскольку это поле может быть полем из таблицы p (Product) или n (NewPrice).

Вы также можете использовать CTE (Common Таблица Expression), если ваш SQL движок поддерживает его:

WITH x AS (
SELECT p.ProductID, p.ProductName, p.Price AS OldPrice, n.Price as NewPrice 
FROM Products as p 
JOIN NewPrices as n on p.ProductID = n.ProductID 
) 
UPDATE x set OldPrice = NewPrice