使用单元格引用一次更新多个行值

Update Multiple Row Values at Once using cell a reference

我有一个 table 我需要更新,但我不确定如何去做。这是架构

t1.id, t1.line, t1.item, t1.type

t2.id, t2.t1_id

t3.t2_id, t3.t1_line, t3.quantity1, t3.quantity2

t3 基本上是在维护 t1 中特定项目的数量。

在这个查询中,t3会有n条记录。这个想法是,对于 t3 中的每个条目 n,t1 中都会有一定数量的项目应该与之相关联。我需要计算这些项目并将 t3.t1_quantity1 设置为该计数。

SQLFiddle Schema

使用上述模式,在一个查询中,我想知道第 1 行有多少项是类型 0,第 1 行有多少项是类型 1,结果输入到 t3.quantity1 和t3.quantity2 分别。第 2 行也是如此,如果 t3 中有更多行,则依此类推。

查询末尾的

t3 将显示以下内容

1, 1, 4, 2
1, 2, 4, 1
1, 3, 8, 3

我该怎么做?

您需要使用 UPDATEJOIN 以及 CASE WHENCOUNT 来制作它。

  1. 编写子查询以从 t1 table.
  2. 中获取 quantity1quantity2line 列数
  3. join t2, t3 tables by t1.line
  4. UPDATE 数据到 t3 table.

看起来像这样。

 UPDATE result
 SET quantity1 = t.qty1,
     quantity2 = t.qty2
 FROM(
   select line,
    COUNT(case when type = 0 then 1 END) qty1,
    COUNT(case when type = 1 then 1 END) qty2
   from t1 
   GROUP BY line
 ) t 
 INNER JOIN t2 on t2.t1_id = t.line
 inner join t3 result on t.line = result.t1_line

sqlfiddle

[结果]:

| t2_id | t1_line | quantity1 | quantity2 |
|-------|---------|-----------|-----------|
|     1 |       1 |         4 |         2 |
|     1 |       2 |         4 |         1 |
|     1 |       3 |         8 |         3 |