如何使用Join编写等效的SQL查询?

悄悄地

原始SQL查询:

SELECT *
FROM
  (SELECT p.id,
          p.title,
          p.mark,

     (SELECT max(created)
      FROM comments c
      WHERE c.post_id=p.id
        AND c.mark=1) AS latest_at
   FROM posts p) AS Post
WHERE Post.latest_at IS NOT NULL
ORDER BY latest_at DESC LIMIT 10

我正在尝试使用join编写等效的sql查询。我该怎么做?

mysql> describe posts;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_id     | int(11)      | NO   |     | NULL    |                |
| title       | varchar(255) | NO   |     | NULL    |                |
| body        | text         | YES  |     | NULL    |                |
| category_id | int(11)      | YES  |     | NULL    |                |
| tags        | varchar(50)  | YES  |     | NULL    |                |
| mark        | tinyint(4)   | NO   |     | 1       |                |
| created     | datetime     | YES  |     | NULL    |                |
| modified    | datetime     | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

mysql> describe comments;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| post_id  | int(11)      | NO   | MUL | NULL    |                |
| name     | varchar(255) | NO   |     | NULL    |                |
| email    | varchar(255) | NO   |     | NULL    |                |
| body     | varchar(500) | NO   |     | NULL    |                |
| mark     | tinyint(4)   | NO   |     | 1       |                |
| created  | datetime     | YES  |     | NULL    |                |
| modified | datetime     | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

任何答案将不胜感激。提前致谢。

乔治·贝索斯(Giorgos Betsos)

试试这个:

SELECT p.id, p.title, p.mark,
       c.latest_at     
FROM posts p
LEFT JOIN (
   SELECT post_id, MAX(created) AS latest_at
   FROM comments
   WHERE mark = 1
   GROUP BY post_id 
) AS c ON c.post_id = p.id 
WHERE c.latest_at IS NOT NULL
ORDER BY c.latest_at DESC LIMIT 10

或者只是这样:

SELECT p.id, p.title, p.mark,
       c.latest_at     
FROM posts p
INNER JOIN (
   SELECT post_id, MAX(created) AS latest_at
   FROM comments
   WHERE mark = 1
   GROUP BY post_id 
) AS c ON c.post_id = p.id 
ORDER BY c.latest_at DESC LIMIT 10

因为第一个查询c.latest_at IS NOT NULLWHERE子句谓词LEFT JOIN变成了INNER JOIN

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在SQL中使用JOIN编写子查询

来自分类Dev

如何在 linq 或 lambda 中使用 join 和 where 子句编写 sql 查询

来自分类Dev

如何在Entity Framework Core中使用Join()方法将Sql查询转换为Linq及其等效项

来自分类Dev

如何编写SQL查询

来自分类Dev

如何编写SQL查询?

来自分类Dev

编写与使用内部联接和group by子句的sql select查询等效的java算法

来自分类Dev

如何使用LINQ从SQL查询编写LINQ查询?

来自分类Dev

如何使用 django 查询集编写这个原始 SQL 查询?

来自分类Dev

如何使用SQL LEFT JOIN查询

来自分类Dev

如何使用SQL LEFT JOIN查询

来自分类Dev

如何编写从LEFT JOIN结果中减去INNER JOIN结果的SQL查询?

来自分类Dev

如何用等效的LEFT OUTER JOIN替换复杂的SQL MINUS查询

来自分类Dev

如何编写以下SQL查询

来自分类Dev

如何正确编写SQL查询

来自分类Dev

如何编写以下SQL查询

来自分类Dev

如何编写条件SQL查询?

来自分类Dev

使用ON或JOIN的SQL查询

来自分类Dev

使用Join的Sql Not IN查询

来自分类Dev

如何使用子字符串编写SQL查询

来自分类Dev

如何使用if-else编写SQL查询语句

来自分类Dev

如何使用子字符串编写SQL查询

来自分类Dev

如何使用此数据库设计编写 SQL 查询

来自分类Dev

如何在 eloquent laravel 中使用别名编写 SQL 查询?

来自分类Dev

如何在Rails 4中使用Join而不是子查询来编写此ActiveRecord查询

来自分类Dev

如何在多个条件下编写此SQL JOIN查询

来自分类Dev

如何在没有JOIN的情况下编写SQL查询

来自分类Dev

如何编写匹配查询或使用前缀查询

来自分类Dev

如何使用创建的列作为JOIN参数SQL查询

来自分类Dev

如何在“JOIN”sql查询中使用“WHERE”

Related 相关文章

热门标签

归档