这时我有一张tblLocation带有柱子的桌子ID, Location, PartOfID.
该表以递归方式连接到自身: PartOfID -> ID
我的目标是选择输出如下:
> France > Paris > AnyCity >
Run Code Online (Sandbox Code Playgroud)
说明:AnyCity位于巴黎,巴黎位于法国.
我到现在为止找到的解决方案是这样的:
; with q as (
select ID,Location,PartOf_LOC_id from tblLocatie t
where t.ID = 1 -- 1 represents an example
union all
select t.Location + '>' from tblLocation t
inner join q parent on parent.ID = t.LOC_PartOf_ID
)
select * from q
Run Code Online (Sandbox Code Playgroud)
不幸的是我收到以下错误:
使用UNION,INTERSECT或EXCEPT运算符组合的所有查询在其目标列表中必须具有相同数量的表达式.
如果您知道如何修复我的输出,那就太棒了.
我知道我可以使用grep在这样的文件夹中的所有文件中找到一个单词
grep -rn core .
Run Code Online (Sandbox Code Playgroud)
但我当前的目录有很多子目录,我只想搜索当前目录及其所有子目录中的所有xml文件.我怎样才能做到这一点 ?
我试过这个
grep -rn core *.xml // Does not work
Run Code Online (Sandbox Code Playgroud)
但它只搜索当前目录中的xml文件.它不会递归地执行.
在Oracle中,如果我将表定义为...
CREATE TABLE taxonomy
(
key NUMBER(11) NOT NULL CONSTRAINT taxPkey PRIMARY KEY,
value VARCHAR2(255),
taxHier NUMBER(11)
);
ALTER TABLE
taxonomy
ADD CONSTRAINT
taxTaxFkey
FOREIGN KEY
(taxHier)
REFERENCES
tax(key);
Run Code Online (Sandbox Code Playgroud)
有了这些价值......
key value taxHier
0 zero null
1 one 0
2 two 0
3 three 0
4 four 1
5 five 2
6 six 2
Run Code Online (Sandbox Code Playgroud)
这个查询语法......
SELECT
value
FROM
taxonomy
CONNECT BY
PRIOR key = taxHier
START WITH
key = 0;
Run Code Online (Sandbox Code Playgroud)
会屈服......
zero
one
four
two
five
six
three …Run Code Online (Sandbox Code Playgroud) JPA 2是否有任何运行递归查询的机制?
这是我的情况:我有一个实体E,它包含一个整数字段x.它也可能有类型E的子节点,通过@OneToMany映射.我想做的是通过主键找到一个E,并获得它的x值以及它所有后代的x值.有没有办法在单个查询中执行此操作?
我正在使用Hibernate 3.5.3,但我不想对Hibernate API有任何明确的依赖.
编辑:根据这一项目,Hibernate并没有具备这个功能,或者至少是在三月份没有.所以JPA似乎不太可能拥有它,但我想确定一下.
我是SQL Server开发的新手.我的大部分经验都是通过Oracle完成的.
假设我有下表包含约会对象
CREATE TABLE [dbo].[Appointments](
[AppointmentID] [int] IDENTITY(1,1) NOT NULL,
.......
[AppointmentDate] [datetime] NOT NULL,
[PersonID] [int] NOT NULL,
[PrevAppointmentID] [int] NULL,
CONSTRAINT [PK_Appointments] PRIMARY KEY CLUSTERED ([AppointmentID] ASC)
Run Code Online (Sandbox Code Playgroud)
可以推迟约会,因此,当发生这种情况时,会在表上创建一个新行,其中PrevAppointmentID字段包含原始约会的ID.
我想查询以获取人员约会的历史记录.例如,如果ID = 1的任命被推迟两次,并且这些延期已创建ID为= 7且ID = 12的约会,则我希望进行一个返回以下结果的查询:
AppointmentID PrevAppointmentID
----------------- ----------------------
1 NULL
7 1
12 7
Run Code Online (Sandbox Code Playgroud)
如果使用Oracle,我记得可以使用CONNECT BY PRIOR子句获得类似的东西.
有没有办法进行查询以实现这些结果?
我正在使用SQL Server 2005/2008.
提前致谢
我在SQL Server数据库中使用了一组分层数据.数据以guid作为主键存储,而parentGuid作为指向直接父对象的外键存储.我最常通过WebApi项目中的Entity Framework访问数据.为了使情况更复杂,我还需要基于此层次结构管理权限,以便应用于父级的权限适用于其所有后代.我的问题是:
我已经搜遍了所有,无法决定哪种方法最适合处理这种情况.我知道我有以下选择.
Recursive CTEsCommon Table Expression(也就是RCTE)来处理分层数据.这似乎是正常访问最简单的方法,但我担心在用于确定子对象的权限级别时可能会很慢.hierarchyId表中,并使用SQL Server所提供的功能,如数据类型字段GetAncestor(),IsDescendantOf()和等,这似乎将让查询很容易,但似乎需要一个相当复杂的插入/更新触发器,以保持HIERARCHYID域是正确的通过插入和移动closure table,它将存储表中的所有关系.我想象如下:父列和子列,每个父 - >子关系将被表示.(即1-> 2 2-> 3将在数据库中表示为1-2,1-3,2-3).缺点是这需要插入,更新和删除触发器,即使它们非常简单,并且此方法会生成大量记录.我已经尝试过全面搜索,但在这三种方法之间找不到任何建议.
PS我也对这个问题的任何替代解决方案持开放态度
sql-server recursive-query common-table-expression hierarchyid transitive-closure-table
我使用PostgreSQL 9.1来查询分层树结构数据,包括与节点连接的边(或元素).数据实际上是用于流网络,但我已经将问题抽象为简单的数据类型.考虑示例tree表.每条边都有长度和面积属性,用于确定网络中的一些有用指标.
CREATE TEMP TABLE tree (
edge text PRIMARY KEY,
from_node integer UNIQUE NOT NULL, -- can also act as PK
to_node integer REFERENCES tree (from_node),
mode character varying(5), -- redundant, but illustrative
length numeric NOT NULL,
area numeric NOT NULL,
fwd_path text[], -- optional ordered sequence, useful for debugging
fwd_search_depth integer,
fwd_length numeric,
rev_path text[], -- optional unordered set, useful for debugging
rev_search_depth integer,
rev_length numeric,
rev_area numeric
);
CREATE INDEX ON tree (to_node);
INSERT INTO …Run Code Online (Sandbox Code Playgroud) postgresql recursive-query common-table-expression hierarchical-query transitive-closure-table
我有一个简单的问题.不知怎的,我无法找到明确的答案.
有多少是WITH RECURSIVE语法PostgreSQL的优化?我的意思是:它仅仅是一系列非递归查询的语法糖,或者它是一个单一的语句,尽管其复杂的语义已经作为一个整体进行了优化.一个后续问题 - 关于优化这种语法的可能性有多大?当然,非常欢迎有关此事的一些具体数据.
我有以下数据,由A值MM(按月)排序.
该B列GREATEST(current value of A + previous value of B, 0)以类似电子表格的方式计算.
如何B使用SQL查询进行计算?
我使用的是Oracle 10g,因此我无法使用递归查询.
这是我的测试数据:
MM | A | B
-----------+--------+------
2012-01-01 | 800 | 800
2012-02-01 | 1900 | 2700
2012-03-01 | 1750 | 4450
2012-04-01 | -20000 | 0
2012-05-01 | 900 | 900
2012-06-01 | 3900 | 4800
2012-07-01 | -2600 | 2200
2012-08-01 | -2600 | 0
2012-09-01 | …Run Code Online (Sandbox Code Playgroud) 使用PostgreSQL 8.4.14数据库,我有一个表格树结构的表,如下例所示:
CREATE TABLE unit (
id bigint NOT NULL PRIMARY KEY,
name varchar(64) NOT NULL,
parent_id bigint,
FOREIGN KEY (parent_id) REFERENCES unit (id)
);
INSERT INTO unit VALUES (1, 'parent', NULL), (2, 'child', 1)
, (3, 'grandchild A', 2), (4, 'grandchild B', 2);
Run Code Online (Sandbox Code Playgroud)
id | name | parent_id
----+--------------+-----------
1 | parent |
2 | child | 1
3 | grandchild A | 2
4 | grandchild B | 2
Run Code Online (Sandbox Code Playgroud)
我想为这些单元创建一个访问控制列表,其中每个单元可能拥有自己的ACL,或者从具有自己的ACL的最近的祖先继承它.
CREATE TABLE acl (
unit_id bigint NOT NULL …Run Code Online (Sandbox Code Playgroud) recursive-query ×10
postgresql ×4
sql ×4
sql-server ×3
oracle ×2
connect-by ×1
database ×1
grep ×1
hierarchyid ×1
java ×1
jpa-2.0 ×1
jpql ×1
linux ×1
orm ×1
regex ×1
t-sql ×1
tree ×1