MySQL使用select in or子句的结果[重复]
Posted
技术标签:
【中文标题】MySQL使用select in or子句的结果[重复]【英文标题】:MySQL use result of select in or clause [duplicate] 【发布时间】:2020-01-01 15:53:30 【问题描述】:我的架构:
id:int | post_hash:str | post_body: str | is_op: tinyint(1) | parent_id:int
1 | 'dddba11f43d90117b01' | 'test post' | 1 | Null
2 | Null | 'test reply'| 0 | 1
这是用于存储论坛帖子和回复。如何选择post_hash
及其由parent_id
指定的所有子帖子?为了澄清,这个想法是这样的:
SELECT p.id FROM posts p WHERE post_hash = ? or parent_id = p.id
其中p.id
是选择的结果。它是自引用的,因此需要子查询或连接,但我不确定如何处理。
【问题讨论】:
请edit 你的问题包含一个更大的例子,说明你想从表格中读取什么。将几个示例行添加到您的表中,并从该表中写入您想要的结果集。有关 SQL 相关问题,请参阅meta.***.com/questions/333952/…。 【参考方案1】:我怀疑仅使用 Slaasko 建议的 UNION 是否足以解决此问题的通用解决方案。因此,如果您使用的是 mysql 8.0 或更高版本,您可以尝试使用递归查询方法,即使您有多个孩子也可以使用 -
WITH RECURSIVE post_det(id, is_op, parent_id) AS(
SELECT id, is_op, parent_id
FROM posts
WHERE post_hash = 'dddba11f43d90117b01'
UNION ALL
SELECT PD.id, PD.is_op, PD.parent_id
FROM posts P
INNER JOIN post_det PD ON P.parent_id = PD.is_op)
SELECT * FROM post_det;
【讨论】:
【参考方案2】:使用UNION
组合来自父查询和子查询的结果集:
SELECT id
FROM posts
WHERE post_hash = ?
UNION
SELECT p.id
FROM posts p
JOIN posts pp on pp.id=p.parent_id
WHERE pp.post_hash = ?
【讨论】:
以上是关于MySQL使用select in or子句的结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章