2014-10-01 5 views
0

Так что я искал другие вопросы, которые были похожи, но я не могу заставить его обрабатывать. Я продолжаю получать ошибку ORA-01427: single-row subquery returns more than one row. Я знаю, что у меня есть мои 2 таблицы где-то в моей статье where, но я борюсь.заявление об обновлении из другой таблицы

Столы

Price_list

brand_id (null) 
upc (populated) 

upc_list

brand_id (populated) 
upc (popualted) 

SQL, чтобы вытащить список нулевых brand_ids

SELECT DISTINCT ul.brand_id 
FROM price_list pl, 
    upc_list ul 
WHERE ul.upc  = pl.upc 
AND ul.upc_type = 'p' 
AND pl.brand_id IS NULL ; 

Мои обновления запроса:

UPDATE pricelist 
    SET pl.brand_id = 
    (SELECT DISTINCT ul.brand_id 
    FROM pricelist, 
     upc_list 
    WHERE ul.upc  =pl.upc 
    AND ul.upc_type = 'I' 
    AND pl.brand_id IS NULL 
    ) 

где (не уверен, что для входа. с или без него, он все еще дает вышеуказанную ошибку)

пожалуйста, помогите

+0

'=' в 'SET' предполагается получить только один ряд .. Теперь ваш' SELECT' запрос возвращает более одной строки .. Следовательно, ошибка. Возможно, вы ищете [коррелированное обновление] (http://psoug.org/snippet/UPDATE-Correlated-Update_602.htm) –

ответ

0

A коррелированныхUpdate запроса.

, что я добавил ROWNUM <= 1

Примечание всегда делают subquery вернуть одну brand_id, когда существует более чем один для upc матча.

UPDATE pricelist pl 
SET pl.brand_id = 
    (
    SELECT ul.brand_id 
    FROM upc_list ul 
    WHERE ul.upc = pl.upc 
    AND ul.upc_type = 'I' 
    AND ROWNUM <= 1 
) 
WHERE pl.brand_id IS NULL; 
0

Запросить информацию о результатах запроса, чтобы помочь вам в дальнейшем.

Следующий запрос будет тянуть идентификаторы NULL для upc_type = 'I', для которых выполняется инструкция по обновлению.

SELECT DISTINCT ul.brand_id 
FROM pricelist, 
    upc_list 
WHERE ul.upc  =pl.upc 
AND ul.upc_type = 'I' 
AND pl.brand_id IS NULL 

Благодаря & С уважением, Суровые