【问题标题】:Joining two select queries and ordering results加入两个选择查询和排序结果
【发布时间】:2013-11-23 01:20:11
【问题描述】:

基本上我只是不确定为什么这个查询无法执行:

(SELECT replies.reply_post, replies.reply_content, replies.reply_date AS d, members.username
     FROM (replies) AS a 
        INNER JOIN members ON replies.reply_by = members.id)

            UNION

(SELECT posts.post_id, posts.post_title, posts.post_date AS d, members.username 
     FROM (posts) as b 
        WHERE posts.post_set = 0 
           INNER JOIN members ON posts.post_by = members.id)

ORDER BY d DESC LIMIT 5

我收到此错误:

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用 在第 2 行的“a INNER JOIN members ON replies.re”附近

我要做的就是从这两个表中选择最近的 5 行(日期)。我已经尝试过 Join、union 等,并且我看到了许多查询,人们在 FROM 语句之后放置了另一个查询,而这对我来说是如何工作的没有逻辑意义?

我可以肯定地说您可以从两个不同但已连接的查询中连接同一个表吗?还是我采取了完全错误的方法,因为坦率地说,尽管阅读了错误消息,但我似乎看不到这个查询是如何失败的。

(那里的两个查询都可以正常工作)

【问题讨论】:

    标签: mysql sql join


    【解决方案1】:

    我认为您的查询在以下部分存在语法错误:

    FROM (posts) as b 
            WHERE posts.post_set = 0 
               INNER JOIN members ON posts.post_by = members.id)
    

    内连接应该在 where 条件之前。此外,您的加入条件是错误的。您需要应用诸如

    之类的条件
    INNER JOIN members ON a.reply_by = members.id)
    INNER JOIN members ON b.post_by = members.id)
    

    所以你的查询应该是这样的

    (SELECT a.reply_post, a.reply_content, a.reply_date AS d, members.username
     FROM (replies) AS a 
     INNER JOIN members ON a.reply_by = members.id)
    
     UNION
    
    (SELECT b.post_id, b.post_title, b.post_date AS d, members.username 
     FROM (posts) as b 
     INNER JOIN members ON b.post_by = members.id
     WHERE b.post_set = 0)
    
    ORDER BY d DESC LIMIT 5
    

    【讨论】:

    • 哦,哇,我突然想到了一些事情,非常感谢。虽然为什么我必须使用 b.post_set (和其他)而不是 posts.post_set?
    【解决方案2】:

    试试这个:

    (SELECT a.reply_post, a.reply_content, a.reply_date AS d, members.username
     FROM replies AS a 
        INNER JOIN members ON a.reply_by = members.id)
    
            UNION
    
    (SELECT b.post_id, b.post_title, b.post_date AS d, members.username 
     FROM posts as b 
        INNER JOIN members ON b.post_by = members.id 
        WHERE b.post_set = 0)  /* Use where condition after matching Id's using ON */
    
    ORDER BY d DESC LIMIT 5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 2013-11-08
      • 2014-04-01
      • 1970-01-01
      相关资源
      最近更新 更多