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子句的结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL select in join 子句扫描太多行

在 IN 子句 Mysql 中使用 GROUP_CONCAT 结果

sql中=all和 in的区别

按mysql中select语句“in”子句中的值顺序排序

MySQL UNION SELECT 和 IN 子句

Mysql容易忽视的基础杂记