mysql - 我可以使用 join 而不是返回 1 行的子查询吗?

标签 mysql sql

这是我的查询:

SELECT p1.*,
       (select guid
        from wp_posts p2
        where p2.post_parent = p1.id
        ORDER by p2.id DESC
        LIMIT 1) as post_image
from wp_posts p1
where p1.post_status = 'publish' and
      p1.post_type = 'post'
order by p1.id DESC limit 4

我想进行相同的查询,但使用join(而不是子查询)。这可能吗?

最佳答案

我们可以尝试使用一系列额外的连接进行重写:

SELECT
    p1.*,
    COALESCE(t2.guid, 'NA') AS post_image
FROM wp_posts p1
LEFT JOIN
(
    SELECT post_parent, MAX(id) AS max_id
    FROM wp_posts
    GROUP BY post_parent
) t1
    ON p1.id = t2.post_parent
LEFT JOIN wp_posts t2
    ON t1.max_id = t2.id
WHERE p1.post_status = 'publish' AND p1.post_type = 'post'
ORDER BY p1.id DESC
LIMIT 4;

通过观察,上述重构背后的逻辑是,当前子查询针对 post_parent 的每个值返回具有 id 最大值的记录。因此,我们可以加入一个子查询,该子查询查找每个 post_parent 组的最大 id 值。然后,我们需要再次加入 wp_posts 以引入最大 id 行的 guid 值。

关于mysql - 我可以使用 join 而不是返回 1 行的子查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51606564/

相关文章:

sql - 一对一关系还是一对多关系?

MySQL SubString 提取精确部分

mysql - 单元测试找不到表

mysql - CodeIgniter 别名列

mysql - 如何从存储过程的结果集中获取行数 'returned'

mysql - 内部连接错误

php - 如何根据已选行中的值选择行

php - Zend update() 更改 id,尽管 id 设置为 NULL 和 auto_increment

sql - 使用 PostgresQL 检查现有列的约束

java - 面向多数据库 Java/hibernate 开发人员的廉价/免费查询工具