使用返回多行的子查询更新表

时间:2009-07-30 05:59:09

标签: sql

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 个答案:

答案 0 :(得分:1)

我不明白你想要做什么,但你可以在subselect语句中使用子查询:

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()只会为您选择一个值。如果您想自己选择,请进一步限制子查询

答案 1 :(得分:1)

在Oracle和& SQL Sever,如果子查询返回超过1行,数据库将报告错误。

在您的情况下,如果子查询结果值相同,只需使用MAX()或MIN()函数让DB选择一个值。

答案 2 :(得分:0)

尝试:

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将以最后一行结束。

罗布