标签: common-table-expression

跨多个表添加序列值

我的 Postgres 数据库中有以下两个表:

CREATE TABLE User (
    Id       serial UNIQUE NOT NULL, 
    Login    varchar(80) UNIQUE NOT NULL,
PRIMARY KEY (Id,Login)
);

CREATE TABLE UserData (
    Id       serial PRIMARY KEY REFERENCES Users (Id),
    Password varchar(255) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

假设我添加了一个新用户,INSERT INTO Users(Id, Login) VALUES(DEFAULT, 'John')并且还想添加VALUES(id, 'john1980')John的新 ID UserDataid

我如何获得该 ID?对刚刚创建的东西运行查询似乎是多余的。我在数据库中遇到过多次这样的情况。也许我的设计总体上有缺陷?

(我显然不会像那样存储密码。)

sql postgresql database-design primary-key common-table-expression

2
推荐指数
1
解决办法
1740
查看次数

带子运行总计的递归 SQL 查询

我有一张像这样的桌子

create table installs (datetime date,installs int);
insert into installs (date, installs) 
values 
('10-01-2014', 2),
('10-02-2014', 4),
('10-03-2014', 1),
('10-04-2014', 10)
Run Code Online (Sandbox Code Playgroud)

所以我们的表数据看起来像这样

表数据

给定这个表,我想要一个可以生成几天内安装计数的查询。

所以我正在寻找的结果集是

结果集

例如,查看 day 的记录10/2/2014

共有day_out=04 个安装。在那之后的一天 ( days_out=1),现在总共有 5 个安装(10/2 起有 4 个安装,10/3 起有 1 个安装)在那之后的第二天 ( days_out=2),总共有 15 个安装(前 2 天有 5 个安装) ,4号新增10个)

我之前在一个更大的查询中很容易地做到了这一点,只是使用内部选择来获取安装计数(当场对它们求和),但是,这不再是削减它......所以我能想到的唯一解决方案是创建一个值表,然后将其与更大的查询连接起来。

我编写此查询时遇到的唯一问题是我不知道如何执行:)。

如果有人能为这个问题想出一个更好的标题,我会改变它,当我不确定该朝哪个方向发展时,很难命名这个标题。

sql-server common-table-expression

2
推荐指数
1
解决办法
126
查看次数

关于WITH RECURSIVE Query Postgres的可能解释

我一直在阅读有关 Postgres 中的 With Query 的内容。这就是我惊讶的地方

WITH RECURSIVE t(n) AS (
    VALUES (1)
  UNION ALL
    SELECT n+1 FROM t WHERE n < 100
)
SELECT sum(n) FROM t;
Run Code Online (Sandbox Code Playgroud)

我无法理解查询的评估是如何工作的。

  • t(n) 听起来像是一个带有参数的函数。n的值是如何传递的。

关于 SQL 中递归语句的崩溃如何发生的任何见解。

sql postgresql common-table-expression

2
推荐指数
1
解决办法
1962
查看次数

Postgres:以深度优先的方式在递归查询中嵌套记录

我正在开发一个简单的评论系统,用户可以在其中评论其他评论,从而创建层次结构。为了按层次顺序获取评论,我在 Postgres 中使用了公共表表达式。

以下是使用的字段和查询:

id
user_id
parent_comment_id
message

WITH RECURSIVE CommentCTE AS (
    SELECT id, parent_comment_id, user_id
    FROM comment
    WHERE parent_comment_id is NULL

    UNION ALL

    SELECT child.id, child.parent_comment_id, child.user_id
    FROM comment child
    JOIN CommentCTE
    ON child.parent_comment_id = CommentCTE.id
)
SELECT * FROM CommentCTE
Run Code Online (Sandbox Code Playgroud)

上面的查询以广度优先的方式返回记录:

id       parent_comment_id       user_id
10              null                30
9               null                30
11               9                  30
14              10                  31
15              10                  31
12              11                  30
13              12                  31
Run Code Online (Sandbox Code Playgroud)

但是是否可以修改它以实现如下所示的内容,其中以深度优先的方式为该评论集一起返回记录?重点是通过这种方式获取数据,让前端渲染更加流畅。

id       parent_comment_id       user_id
9               null                30
11               9                  30
12              11 …
Run Code Online (Sandbox Code Playgroud)

postgresql recursive-query common-table-expression

2
推荐指数
1
解决办法
712
查看次数

是否可以在 PostgreSQL 中使用 CTE 加入?

我正在尝试编写这样的查询

WITH a AS (SELECT key FROM table) 
SELECT * 
FROM a 
  JOIN b;
Run Code Online (Sandbox Code Playgroud)

这会在 PostgreSQL 10.4 中产生语法错误。

为什么会出现这个错误?

看起来我将创建一个视图。有更好的解决方案吗?

sql postgresql join common-table-expression

2
推荐指数
1
解决办法
3678
查看次数

使用 Postgres 使用多个 WITH tablename AS (...) 语句

对于 SQL 服务器,有一个这样的确切问题,但我使用的是 Postgres 9.3 并且','没有用

我正在比较两个不同的年份。例如 2016 年和 2015 年

我会检查用户在 2 年的课程中是否在相同科目上获得了任何不良成绩。

我的代码如下

with currentyeargrade ( 
      select ....
      from (...
             ...)t)

with previousyeargrade(
      select ....
      from (...
             ...)y)

select *
from currentyeargrade cyg
inner join previousyeargrade pvg on pvg.userid = cyg.userid
Run Code Online (Sandbox Code Playgroud)

我是一名 SQL 开发人员,我没有创建临时表的管理员权限。

sql postgresql common-table-expression postgresql-9.3

2
推荐指数
1
解决办法
1631
查看次数

为什么带有 DELETE 的 PostgreSQL CTE 不起作用?

如果同一个表中的更新使用两个 CTE 导致数量为 0,我试图从我的库存表中删除一条记录。更新插入正在工作,但删除没有生成我期望的结果。库存表中的数量正在更改为零,但记录并未被删除。表结构:

CREATE TABLE IF NOT EXISTS stock_location (
    stock_location_id SERIAL
    , site_code VARCHAR(10) NOT NULL
    , location_code VARCHAR(50) NOT NULL
    , status CHAR(1) NOT NULL DEFAULT 'A'
    , CONSTRAINT pk_stock_location PRIMARY KEY (stock_location_id)
    , CONSTRAINT ui_stock_location__keys UNIQUE (site_code, location_code)
);

CREATE TABLE IF NOT EXISTS stock (
    stock_id SERIAL
    , stock_location_id INT NOT NULL
    , item_code VARCHAR(50) NOT NULL
    , quantity FLOAT NOT NULL
    , CONSTRAINT pk_stock PRIMARY KEY (stock_id)
    , CONSTRAINT ui_stock__keys UNIQUE (stock_location_id, item_code)
    , …
Run Code Online (Sandbox Code Playgroud)

sql postgresql common-table-expression sql-delete

2
推荐指数
1
解决办法
3555
查看次数

Databricks 和 Spark 中的公用表表达式 (CTE)

我在 Databricks 中有一个 spark 数据框。我正在尝试使用通用表表达式 (CTE) 运行一些 sql 查询。这是前 10 行数据

+----------+----------+------+---+---+---------+-----------------+
| data_date|   user_id|region|sex|age|age_group|sum(duration_min)|
+----------+----------+------+---+---+---------+-----------------+
|2020-01-01|22600560aa|     1|  1| 28|        2|              0.0|
|2020-01-01|17148900ab|     6|  2| 60|        5|           1138.0|
|2020-01-01|21900230aa|     5|  1| 43|        4|              0.0|
|2020-01-01|35900050ac|     8|  1| 16|        1|            224.0|
|2020-01-01|22300280ad|     6|  2| 44|        4|              8.0|
|2020-01-02|19702160ac|     2|  2| 55|        5|              0.0|
|2020-02-02|17900020aa|     5|  2| 64|        5|            264.0|
|2020-02-02|16900120aa|     3|  1| 69|        6|              0.0|
|2020-02-02|11160900aa|     6|  2| 52|        5|              0.0|
|2020-03-02|16900290aa|     5|  1| 37|        3|              0.0|
+----------+----------+------+---+---+---------+-----------------+
Run Code Online (Sandbox Code Playgroud)

在这里,我将每个用户注册日期存储在 regs CTE …

common-table-expression apache-spark apache-spark-sql databricks

2
推荐指数
1
解决办法
1777
查看次数

使用从其他表上插入返回的 id 更新表

我试图弄清楚如何将 Table1 中的数据插入到 Table2 中,然后使用 Table2 中新创建的 ID 来更新 Table1 中的相应行。

我使用 Postgres 12.4 是为了它的价值

示例:我有两个表,例如usersmetadata

用户表有以下列

| id | info | metadata_id |
Run Code Online (Sandbox Code Playgroud)

元数据表有以下列

| id | data |
Run Code Online (Sandbox Code Playgroud)

我想将表中的所有info值迁移到表的列users中,并使用相应的值更新我的值(当前为空白),本质上是回填外键。datametadatausers.metadata_idmetadata.id

有什么办法可以优雅地完成这个任务吗?我有一个工作查询,它​​锁定两个表并创建一个临时序列以插入到 and 中metadata.idusers.metadata_id但这似乎很脆弱,我需要在元数据表中现有的最高 ID 之后启动序列,这并不理想。

我还尝试使用带有 RETURNING 子句的数据修改 CTE 来更新表users,但无法使其正常工作。

sql postgresql common-table-expression sql-update sql-insert

2
推荐指数
1
解决办法
1262
查看次数

如何在SQL中实现链

我有一个出勤表,如下所示:

图像在这里。

我试图将人们的出席(编码为 ABC、DEF 等)联系在一起。我希望最终结果如下所示:显示每个部分/出勤链的开始和结束日期。如果人 A 从 2021-01-01 到 2021-01-4 参加,那么它应该显示为一行,因为它是一个连续的链。我不知道该怎么做或从哪里开始。这是一种奇怪的出勤数据保存方式。

最终输出

更多信息:我不知道这是否重要,但我最多有 20 列,因为我们的出席人数最多为 20 人。所以这取决于Col20。

sql sql-server common-table-expression sql-server-2016

2
推荐指数
1
解决办法
68
查看次数