2009-07-30 2 views
0
SELECT (b.descr || ' - ' || c.descr) description 
FROM table1 a 
    INNER JOIN table2 b ON a.account = b.account 
    INNER JOIN table3 c ON a.product = c.product 
WHERE a.descr = ' ' ; 

Как обновить таблицу, используя указанный выше подзапрос? его возвращение более чем на один ряд почти 8000 строк? Если у вас есть какие-либо решения для этого, пожалуйста, поделитесь со мной?Обновить таблицу с подзапросом, который возвращает более одной строки

+0

Пожалуйста, разместите сценарии создания таблицы - это экономит нам все время. – Liao

+0

Прем, кажется, у вас есть * четыре вопроса, включая этот, по той же проблеме, с которой вы сталкиваетесь. 1) http://stackoverflow.com/questions/1199733/getting-extra-rows-after-joing-the-3-tables-using-left-join 2) http://stackoverflow.com/questions/ 1198183/update-a-table-using-the-fields-of-the-other-two-table-please-help-me-in-this 3) http://stackoverflow.com/questions/1204563/updating- row-with-subquery-returns-multiple-rows – Liao

+0

Также, пожалуйста, найдите время, чтобы прочитать FAQ по StackOverflow. (3 комментария, которые я знаю - лучше в следующий раз!) – Liao

ответ

1

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

UPDATE table1 a SET a.descr = (
    SELECT MAX(b.descr || ' - ' || c.descr) 
    FROM table2 b, table3 c 
    WHERE b.account = a.account AND c.product = a.product 
) 
WHERE a.descr = ' ' 

МАХ() будет просто выбрать значение для вас. Если вы хотите выбрать его самостоятельно, либо ограничьте дополнительный подзапрос

+0

@ steve Я хочу обновить поле table1 таблицы, объединив описание таблицы2 и таблицы 3, я получил использование оператора select. Когда я пытаюсь его обновить, он показывает запрос sub ошибки, возвращающий более одной строки. Не могли бы вы помочь мне в этом. – Prem

+0

Разве мое опубликованное заявление не делает трюк? –

1

В Oracle & SQL Sever, если sub-запрос возвращает более 1 строки, база данных сообщит об ошибке.

В вашем случае, если приведенные значения sub-запроса одинаковы, просто используйте функцию MAX() или MIN(), чтобы позволить DB выбрать значение.

+0

Я хочу обновить таблицу с разными значениями в другой строке, если мы используем max(), она будет обновляться с одинаковым правым значением. Если я ошибаюсь, верьте мне. Помогите мне найти решение. – Prem

0

Try:

UPDATE a SET descr = (b.descr || ' - ' || c.descr) 
FROM table1 a 
    INNER JOIN table2 b ON a.account = b.account 
    INNER JOIN table3 c ON a.product = c.product 
WHERE a.descr = ' ' ; 

При наличии нескольких строк, table1 будет в конечном итоге с последним видел.

Rob