【问题标题】:How to solve ERROR 1248 (42000): Every derived table must have its own alias如何解决 ERROR 1248 (42000):每个派生表都必须有自己的别名
【发布时间】:2013-09-08 20:21:09
【问题描述】:

以下查询给出了错误 1248 (42000):每个派生表都必须有自己的别名

SELECT *
FROM   post 
       LEFT JOIN post_plus 
              ON ( post.id = post_plus.news_id ) 
       LEFT JOIN (SELECT DISTINCT c1.postid FROM post_category c1 JOIN post_category c2 ON c1.postid = c2.postid WHERE  c1.categoryid IN ( 130, 3, 4, 5 ) AND c2.categoryid = 73 ) 
       where approve = 1 
ORDER  BY fixed DESC, 
          date DESC 
LIMIT  0, 7; 

我试过的

    SELECT a.*
    (FROM   post 
...
    LIMIT  0, 7)a; 

【问题讨论】:

  • 第二个LEFT JOIN 中的子查询没有别名。

标签: mysql sql


【解决方案1】:

派生表需要一个别名,而您也缺少一个连接条件。

SELECT *
FROM   post
       LEFT JOIN post_plus
         ON ( post.id = post_plus.news_id )
       LEFT JOIN (SELECT DISTINCT c1.postid
                  FROM   post_category c1
                         JOIN post_category c2
                           ON c1.postid = c2.postid
                  WHERE  c1.categoryid IN ( 130, 3, 4, 5 )
                         AND c2.categoryid = 73) post_category /*<-- Missing Alias*/
         ON ( post_category.postid = post.id ) /*<-- Missing Join Condition*/
WHERE  approve = 1
ORDER  BY fixed DESC,
          date DESC     
LIMIT  0, 7;           

【讨论】:

  • 它正在工作,但它不是从特定类别中选择帖子,而是打印所有帖子。忽略SELECT DISTINCT... WHERE c1.categoryid IN ( 130, 3, 4, 5 ) AND c2.categoryid = 73
  • @user2696962 - 你需要inner join 而不是left join
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 2012-05-16
  • 2021-05-29
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多