我有这张表,我想存储一条记录链。
CREATE TABLE table_name (
id INT,
unique_id varchar,
reference_id varchar,
);
我想为MariDB实现SQL查询,该查询通过unique_id和所有记录reference_id打印所有记录。像这样:
| id | unique_id | reference_id | | |
|----|-----------|--------------|---|---|
| 43 | 55544 | | | |
| 45 | 45454 | 43 | | |
| 66 | 55655 | 45 | | |
| 78 | 88877 | 66 | | |
| 99 | 454 | 33 | | |
我希望在选择记录55544来获取所有交易时,因为彼此都使用指向它们的id。如何使用递归CTE来实现?有更好的方法吗?
具有unique_id 55544的记录的预期结果:
| id | unique_id | reference_id | | |
|----|-----------|--------------|---|---|
| 43 | 55544 | | | |
| 45 | 45454 | 43 | | |
| 66 | 55655 | 45 | | |
| 78 | 88877 | 66 | | |
如何在HQL中也可以实现此查询?我想在JPA中使用它吗?
答案 0 :(得分:2)
您可以使用递归CTE。这是正确的方法:
var express = require('express');
var app = express();
app.get('/', function(req,res) {
res.send('Homepage');
});
app.listen(3000);
答案 1 :(得分:1)
以下查询应能满足您的期望。这是一个递归查询,它依赖于变量以通过依赖关系树遵循父子关系。
select @ref:=id as id, unique_id, reference_id
from mytable
join (select @ref:=id from mytable WHERE unique_id = 55544)tmp
where reference_id=@ref
此 demo on DB Fiddle 产生:
| id | unique_id | reference_id | | --- | --------- | ------------ | | 45 | 45454 | 43 | | 66 | 55655 | 45 | | 78 | 88877 | 66 |
PS:请注意,这不会返回最上面的父行。如果还需要,可以将WHERE
条件更改为:
where reference_id=@ref or unique_id = 55544