我有这张表
CREATE TABLE IF NOT EXISTS `branch` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`studcount` int(11) DEFAULT NULL,
`username` varchar(64) NOT NULL,
`branch_fk` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FKADAF25A2A445F1AF` (`branch_fk`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;
ALTER TABLE `branch`
ADD CONSTRAINT `FKADAF25A24CEE7BFF` FOREIGN KEY (`login_fk`) REFERENCES `login` (`id`);
你可以看到每个表都有一个指向其他分支行的外键(自我关系)
我想要一个使用HQL(更喜欢HQL)的查询来获取我的用户名(或id)并返回List<String>
(用于用户名)或List<Integer>
(用于id),这是我的所有列表支行;
让我在Example
中显示id studentcount username branch_fk
1 312 user01 NULL
2 111 user02 1
3 432 user03 1
4 543 user04 2
5 433 user05 3
6 312 user06 5
7 312 user06 2
8 312 user06 7
当我调用GetSubBranch(3)时我想要返回:
5, 6
当调用GetSubBranch(2)我想要返回时:
4, 7, 8
答案 0 :(得分:1)
我相信没有可移植的SQL来做到这一点。 更重要的是,我认为几个主要数据库的SQL无法表达这一点。
因此,此功能不是您在HQL中可以执行的操作的一部分。对不起: - (
我读了几个方法。其中大多数涉及权衡取决于级别的数量(提前确定?多少?),记录数量(数百万?)等:
in(ids)
),直到某个级别为空。答案 1 :(得分:1)
有人可能会看看'嵌套集'。查询成为'之间:L和:R'的问题。但拓扑/分层排序丢失(与递归/分层查询相比)。然后插入新项目非常昂贵,因为它需要更新几个(如果不是所有)行...