问题描述
现在正在处理查询,我们希望了解哪个企业为我们提供了最下游的订单。我在这里列出了一个非常基本的表格用于演示,列出了4个企业。 Bar和Donut最终都由Foo推荐,我希望能够向Foo展示,因为一家企业产生了X笔订单。显然,获得Foo(来自Bar)和Bar(来自Donut)的单个推荐是简单的联接。但是您如何从Bar回到Foo?
我要补充一点,我在这个上午做了更多的谷歌搜索,发现一些关于顶级父级的非常相似的问题,并且大多数回答都暗示了递归CTE。自从我深入研究sql东西已经有一段时间了,但是8年前,我知道它们并不太流行。还有其他解决方法吗?在订购时将父ID存储在订购表中也许更好?
+----+--------+--------------------+
| Id | Name | ReferralBusinessId |
+----+--------+--------------------+
| 1 | Foo | |
| 2 | Bar | 1 |
| 3 | Donut | 2 |
| 4 | Coffee | |
+----+--------+--------------------+
解决方法
WITH RECURSIVE entity_hierarchy AS (
SELECT id,name,parent FROM entities WHERE name = 'Donut'
UNION
SELECT e.id,e.name,e.parent FROM entities e INNER JOIN entity_hierarchy eh on e.id = eh.parent
)
SELECT id,parent FROM entity_hierarchy;
,
假设您使用的是SQL Server,则可以使用下面的查询来为特定业务生成分层的ID路径。
client.on('messageReactionAdd',async (reaction,user) => {
if (reaction.emoji.name === '?') {
let role = message.guild.roles.cache.find(role => role.name === 'rolename');
if (message.channel.name !== 'channelname') {
return;
} else {
message.member.addRole(roleid);
}
}
});