Обновить таблицу с помощью подзапроса, который возвращает более одной строки - PullRequest
0 голосов
/ 30 июля 2009
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 строк? Если у вас есть какие-либо решения для этого, пожалуйста, поделитесь со мной?

Ответы [ 3 ]

1 голос
/ 30 июля 2009

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

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

1 голос
/ 30 июля 2009

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

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 = ' '

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

0 голосов
/ 30 июля 2009

Попробуйте:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...