【问题标题】:Update rows from select which return us table从选择返回我们的表中更新行
【发布时间】:2017-02-17 04:39:07
【问题描述】:

我在更新行时遇到问题。我在一个表中有行“count”并引用另一个表“population_id”,并希望使用 select 更新此行“count”,该表返回我们的值(count(client_id),population_id) 有办法做到这一点,最简单的方法是什么?

CREATE OR REPLACE FUNCTION zonning.set_count_population(label text)
RETURNS void AS
$BODY$declare
BEGIN
UPDATE zonning.populations2 SET count = 
(SELECT  count(c.client_id)
FROM    clients.clients c
JOIN clients.phone_numbers pn ON c.client_id = pn.client_id
JOIN clients.phone_numbers_labels pnl ON pn.phone_number_id = pnl.phone_number_id
JOIN clients.labels l ON pnl.label_id = l.label_id
WHERE l.label_name = label)
WHERE population_id = "How i can get id from select?";
END;$BODY$ `
LANGUAGE plpgsql VOLATILE 
COST 100;

【问题讨论】:

  • How i can get id from select? ...您指的是哪个值?
  • 你如何在 UI 中更新这个我的意思是传递 QueryString 或其他任何东西?
  • 在这种情况下,select 用作​​标量子查询(实际上是一个 very 小表,希望正好是一个值)顺便说一句,count 是列的错误选择名称,因为它是一个关键字。 BTW2:"How i can get id from select?":字符串文字应该用单引号引起来,双引号用于标识符。

标签: mysql sql postgresql select


【解决方案1】:

我不是 MySQL 专家,但我认为应该可以这样做:

UPDATE zonning.populations2 SET count = 
(SELECT  count(c.client_id)
FROM    clients.clients c
JOIN clients.phone_numbers pn ON c.client_id = pn.client_id
JOIN clients.phone_numbers_labels pnl ON pn.phone_number_id = pnl.phone_number_id
JOIN clients.labels l ON pnl.label_id = l.label_id
WHERE l.label_name = zonning.populations2.label)
WHERE population_id = "How i can get id from select?";

这是一个简化的例子:

sqlfiddle demo

【讨论】:

    【解决方案2】:

    在 PostgreSQL 中,您可以在 UPDATE 语句中使用 FROM 子句来连接其他表,如下所示:

    UPDATE populations2 pn
    SET count = (subselect using "pn" and "ot")
    FROM other_table ot
    WHERE pn.population_id = ot.id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      相关资源
      最近更新 更多