【问题标题】:Update all rows of a single column from another table从另一个表更新单个列的所有行
【发布时间】:2010-12-24 21:12:10
【问题描述】:

这是我的桌子;

表P:

Pname | Psize
x | -
y | -
z | -
g | -
h | -

表:

Pname | Pdate | Ptext
x | XX.XX.XXXX | aasdhb
x | XX.XX.XXXX | asdbahsbdhasbdh
y | XX.XX.XXXX | ajsdbajsdba
y | XX.XX.XXXX | asndansjdbasd
x | XX.XX.XXXX | asd
z | XX.XX.XXXX | asdasbdhasb
g | XX.XX.XXXX | asdnjasdja
g | XX.XX.XXXX | asndjsabdas
h | XX.XX.XXXX | asndjand
x | XX.XX.XXXX | asdjasndnaksd

如您所见,我添加了一个新列 (Psize),它代表存储 TableS.Ptext 长度。

如何使用相关的 Ptext 长度更新 Psize?

这是我的查询,它不起作用:)(子查询返回超过 1 行)

UPDATE TableP
   set TableP.Psize = (SELECT sum(LENGTH(Ptext)) as length
                         FROM TableS group by Pname)
 where TableP.Pname = TableS.Pname

提前致谢。

【问题讨论】:

    标签: php mysql sql sql-update mysql-error-1242


    【解决方案1】:

    试试:

    UPDATE TableP p
    inner join (
        SELECT Pname, sum(LENGTH(Ptext)) as length 
        FROM TableS 
        group by Pname
    ) s on p.Pname = s.Pname
    set p.Psize = s.length
    

    【讨论】:

    • 谢谢。像魅力一样工作。
    【解决方案2】:

    另一种形式保留您的子选择:

    UPDATE TableP p
    set p.Psize = (
        SELECT sum(LENGTH(s.Ptext)) 
        FROM TableS s
        where s.pname = p.pname
    )
    where exists ( -- just to keep it consistent
      select 1
      from tables s
      where s.pname = p.pname
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 2021-10-16
      • 1970-01-01
      相关资源
      最近更新 更多