【问题标题】:MySQL use result of select in or clause [duplicate]MySQL使用select in or子句的结果[重复]
【发布时间】: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.stackoverflow.com/questions/333952/…

标签: mysql hierarchical-data


【解决方案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 = ? 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 2020-10-17
      相关资源
      最近更新 更多