标签: common-table-expression

当表有自己的链接时的SQL查询

嗨说我有一张桌子:

Person:
PersonId
Name
ManagerId
Run Code Online (Sandbox Code Playgroud)

所以ManagerId是一个回复给另一个人的参考.

所以数据库中可能有人:

1
Bob
null

2
Steve
1

3
Tim
2
Run Code Online (Sandbox Code Playgroud)

所以鲍勃是史蒂夫的经理而史蒂夫是蒂姆的经理.

所以我想要做的就是编写一个查询,让Bob管理下的所有人.直接或间接.所以我想要得到史蒂夫和蒂姆.在同一条线上.

如果我写:

select * from Person
where ManagerId = 1 I would get only Steve.
Run Code Online (Sandbox Code Playgroud)

我怎么写它所以我直接或间接地让每个人都在Bob下?

sql t-sql recursion common-table-expression

6
推荐指数
1
解决办法
1349
查看次数

将递归函数转换为视图

我正在尝试将Postgres中的函数转换为select我打算用作视图的查询.原因是我想通过select带有where子句的查询从客户端访问它,而不是像使用函数那样使用参数.该表表示树(和邻接列表),定义如下:

CREATE TABLE tree (
  id serial primary key,
  parent_id int references tree(id)
);

INSERT INTO tree (id, parent_id) VALUES
  (1,null)
, (2,1), (3,2), (4,3), (5,3)
, (6,5), (7,6), (8,4), (9,8)
, (10,9), (11,9), (12,7)
, (13,12), (14,12), (15,11)
, (16,15), (17,16), (18,14)
, (19,13), (20,19), (21,20);

SELECT setval ('tree_id_seq', 21); -- reset sequence

-- This produces a tree like:
--                                                   +-- <10>
--                                                  /
--                         +-- <4> -- <8> --- <9> -+- <11> …
Run Code Online (Sandbox Code Playgroud)

sql postgresql tree recursion common-table-expression

6
推荐指数
1
解决办法
1229
查看次数

使用CTE索引视图

所以,我刚刚发现SQL Server 2008不允许您在定义中使用CTE索引视图,但它允许您在视图定义中alter添加查询with schemabinding.有这么好的理由吗?出于某种原因我不知道是否有意义?我的印象是,WITH SCHEMABINDING主要目的是允许您索引视图

新的和改进的更多查询操作

;with x
as
(
    select   rx.pat_id
            ,rx.drug_class
            ,count(*) as counts
            from rx
            group by rx.pat_id,rx.drug_class

)
select   x.pat_id
        ,x.drug_class
        ,x.counts
        ,SUM(c.std_cost) as [Healthcare Costs]
    from x
    inner join claims as c
    on claims.pat_id=x.pat_id
    group by x.pat_id,x.drug_class,x.counts
Run Code Online (Sandbox Code Playgroud)

以及创建索引的代码

create unique clustered index [TestIndexName] on [dbo].[MyView]
( pat_id asc, drug_class asc, counts asc)
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server view common-table-expression

6
推荐指数
1
解决办法
1万
查看次数

PostgreSQL多INSERT ...返回多列

我正在使用Postgres 9.3构建一个数据库作为后端,有3个表:

table1 (user_id, username, name, surname, emp_date)
table2 (pass_id, user_id, password)
table3 (user_dt_id, user_id, adress, city, phone)
Run Code Online (Sandbox Code Playgroud)

可以看出table2并且table3是儿童表table1.
我可以user_idtable1(父)中提取新插入的行:

INSERT INTO "table1" (default,'johnee','john','smith',default) RETURNING userid;
Run Code Online (Sandbox Code Playgroud)

我需要将新提取的id(from table1)插入到这些表的唯一user_id列中table2以及table3其他数据中.基本上3 X INSERT ......
我该怎么做?

sql postgresql insert common-table-expression

6
推荐指数
1
解决办法
3694
查看次数

使用SQLite的新WITH RECURSIVE CTE子句

SQLite 3.8.3增加了对CTE的支持.我在这个页面上尝试了一些示例CTE,它们工作正常.但是,在阅读文档并尝试调整一些示例后,我无法创建简单的测试.

首先,我创建一个包含两个字段的简单表:idparent.这将创建一个简单的树或链接的记录列表:

CREATE TABLE test(id INTEGER PRIMARY KEY ASC,parent INTEGER);
Run Code Online (Sandbox Code Playgroud)

现在我用几行填充它:

INSERT INTO test (parent) VALUES (NULL); 
INSERT INTO test (parent) VALUES (1); 
INSERT INTO test (parent) VALUES (2); 
INSERT INTO test (parent) VALUES (3); 
Run Code Online (Sandbox Code Playgroud)

之后我有一个看起来像这样的表:

---+-------
id | parent
---+-------
 1 | NULL
 2 |  1
 3 |  2
 4 |  3
Run Code Online (Sandbox Code Playgroud)

现在我想生成沿3和1之间路径的行列表:

WITH RECURSIVE test1(id,parent) AS (
    VALUES(3,2) 
    UNION ALL 
    SELECT * FROM test WHERE test.parent=test1.id) 
SELECT * FROM …
Run Code Online (Sandbox Code Playgroud)

sqlite common-table-expression

6
推荐指数
1
解决办法
1万
查看次数

在HIVE SQL上使用cte时出错 - java.lang

根据https://cwiki.apache.org/confluence/display/Hive/Common+Table+Expression, 我发现HIVE支持CTE.但是,我在尝试执行简单的CTE时遇到以下错误

 An error occurred while calling o60.sql.
: java.lang.StackOverflowError
        at java.lang.ThreadLocal.set(ThreadLocal.java:201)
Run Code Online (Sandbox Code Playgroud)

尝试以下查询以获取目标节点的所有父项时,我收到此错误

  nodelist = sqlContext.sql("""
       SELECT node,src from known
""")
nodelist.registerTempTable("nodelist") 

pathcalc = sqlContext.sql("""  
        WITH    nodeMaster
      AS ( SELECT   p.node,
                    p.src
           FROM     nodelist p
           WHERE    p.node = """+dest+"""
           UNION ALL
           SELECT   c.node,
                    c.src
           FROM     nodeMaster cte
                    INNER JOIN nodelist c ON c.node = cte.src
         )
        SELECT  node
        FROM    nodeMaster m
""")
Run Code Online (Sandbox Code Playgroud)

sql hive common-table-expression apache-spark pyspark

6
推荐指数
1
解决办法
1606
查看次数

SQL Server CTE层次结构问题

我有一个应用程序服务多级权限和角色

我有这个HIERARCHY:


国家

....区域

........市

............协会

................中央

....................学校

........................类


这个HIERARCHY我把它命名为"EntityLevels"

| ID | Name        | ParentID |
|----|-------------|----------|
| 1  | Country     | Null     |
| 2  | Region      | 1        |
| 3  | City        | 2        |
| 4  | Association | 3        |
| 5  | Center      | 4        |
| 6  | School      | 5        |
| 7  | Class       | 6        |
Run Code Online (Sandbox Code Playgroud)

我还有一个群组表,这意味着乔布斯

| ID | Name               | EntityLevels |
|----|--------------------|--------------|
| 1  | CountryAdmins …
Run Code Online (Sandbox Code Playgroud)

sql-server recursive-query common-table-expression hierarchical-data

6
推荐指数
2
解决办法
162
查看次数

为什么Transact-SQL中的递归CTE需要UNION ALL而不是UNION?

我知道锚是必要的,这是有道理的.而且我知道需要a UNION ALL,如果你的递归CTE没有,它只是不起作用......但我找不到一个很好的解释为什么会这样.所有文档都只是声明你需要它.

为什么我们不能在递归查询中使用a UNION而不是a UNION ALL?似乎不要在重复递归时包含重复项是个好主意,不是吗?我想,这样的东西应该已经在幕后工作了.

t-sql sql-server recursion common-table-expression

6
推荐指数
1
解决办法
1140
查看次数

With子句:嵌套树

我有一个具有同级排序的树层次结构。我需要添加对其他树的引用。

这是数据:

drop table if exists org; CREATE TABLE org(id int primary key, name text, boss int, sibling int, ref int) without rowid;
INSERT INTO org VALUES(0, 'Alice', NULL, null, null);
INSERT INTO org VALUES(1, 'Bob', 0, null, null);
INSERT INTO org VALUES(2, 'Cindy', 0, 1, null);
INSERT INTO org VALUES(3, 'Dave', 1, 4, 7);
INSERT INTO org VALUES(4, 'Emma', 1, null, null);
INSERT INTO org VALUES(5, 'Fred', 2, null, null);
INSERT INTO org VALUES(6, 'Gail', 2, 5, null);
INSERT …
Run Code Online (Sandbox Code Playgroud)

sql sqlite common-table-expression

6
推荐指数
1
解决办法
168
查看次数

Oracle SQL WITH 子句的正确用例和性能

我必须执行涉及多个深度连接和复杂谓词的相对复杂的查询,其中结果(和条件)取决于满足条件的合适条目。涉及主要和次要标准,始终应用主要标准,如​​果结果不令人满意,则进行次要打击。简而言之

  • 返回 N(伪)随机不同客户及其最新文档
  • 结果应包含等量的两种不同类型的文档

但如果没有足够的不同文档类型或不同客户的文档,请尝试仍然满足 N 个文档的数量

  • 通过选择更多其他文档类型来弥补其他文档类型的不足
  • 必要时使用同一客户的多个文档来弥补文档总数的不足

我选择声明式(查询)方法而不是命令式(游标和计数器)。这就是该WITH子句的用武之地。粗略地说,通过使用多个WITH块(CTE),我声明查询(我喜欢将它们视为临时视图)来为两种文档类型声明两个不同的目标集。最后,我将UNION不同 CTE 的子集作为最终结果,并执行一些COUNT检查来限制数量。

COUNT例如,多个 CTE 相互引用,并从上下文中的多个位置引用NOT EXISTS。我是SQL新手,WITH机缘巧合之下就选择了使用它。这是 的正确用例WITH还是反模式?与以命令式方式使用游标和计数器实现相同功能相比,该解决方案的性能如何?我是否选择了错误的方法?我们正在讨论具有数百万个条目的表。

这是整个查询。请原谅,由于保密原因,我不得不隐藏这些字段。

    WITH target_documents AS (
        SELECT
            <Necessary fields>
        FROM documents l
        WHERE
            <Suitable document criteria>
    ),
    target_documents_type_1 AS (
        SELECT * FROM target_documents WHERE type = 1
    ),
    target_documents_type_2 AS (
        SELECT * FROM target_documents WHERE type = 2
    ),
    target_customers AS (
        SELECT
            <Necessary fields>
        FROM customers …
Run Code Online (Sandbox Code Playgroud)

sql oracle performance common-table-expression

5
推荐指数
1
解决办法
1万
查看次数