【发布时间】:2021-04-10 02:29:30
【问题描述】:
鉴于下面的查询,
我面临的问题如下
WHERE
initial_categories.id = categories.id
在上述条件下,categories.id 应与外部 categories.id 同步。
这在我使用 sqlite 时有效(categories.id 与外部值同步)
但是,当我出于某种原因在条件中使用mysql 时,categories.id 仅从外部categories.id 中获取第一个值,之后它不会改变(换句话说,它不同步),更具体地说,categories.id 在 CTE 中始终具有值 1。
我不知道是什么问题。有什么想法吗?
SELECT
*,
(
SELECT
id
FROM
threads
WHERE
threads.category_id IN
(
WITH recursive recursive_categories AS
(
SELECT
initial_categories.id
FROM
categories AS initial_categories
WHERE
initial_categories.id = categories.id
UNION ALL
SELECT
remaining_categories.id
FROM
recursive_categories
JOIN
categories AS remaining_categories
ON recursive_categories.id = remaining_categories.parent_id
)
SELECT
id
FROM
recursive_categories
)
ORDER BY
updated_at DESC limit 1
)
AS recently_active_thread_id
FROM
"categories"
WHERE
"parent_id" IS NULL
AND "categories"."group_category_id" IN
(
1,
2,
3,
4,
5,
6,
7,
8
)
-----查询的目的------
我有桌子
categories
- id
- parent_id
- title
threads
- id
- category_id
- title
现在category 可以拥有sub-categories,它们是使用categories 表中的parent_id 找到的。
具有sub-categories 的category 不直接与thread 关联
只有没有sub-categories 的category 与threads 相关联
举个例子
Computer -> MAC -> MacBook
Computer -> WINDOWS -> HP
在上面的示例中,只有 categories MacBook 和 HP 与 threads 关联
我想通过下面的查询来实现的是在给定父类别
的所有sub-categories 中找到最新线程
继续上述示例,我想找到与Computer 类别间接关联的最新线程
【问题讨论】:
-
您能解释一下您要做什么,以及示例数据和期望的结果吗?
-
我刚刚添加了另一个部分来解释查询的目的。请看一下
标签: mysql sql sqlite correlated-subquery