sql - 连接上的子查询

标签 sql mysql mysql-error-1248

我正在尝试执行查询以过滤一个表中的行,然后将结果加入另一个表中,然后过滤掉其他行。

这是我写的查询:

SELECT * 
  FROM (SELECT media.id AS id2, media.flagged AS flagged2, media.item_status AS status2 
          FROM media 
         WHERE flagged2 != 'nsfw' 
           AND status2 != 'deleted' 
     ORDER BY id2 DESC LIMIT 0,5) 
  JOIN media on info.mid = media.id 
 WHERE info.topic = 'food_drink' 
    OR info.topic='cooking' 
GROUP BY info.mid

我想我已经非常接近让查询正常工作了,但我不断收到消息,“每个派生表都必须有自己的别名。”我用谷歌搜索了这个,从我读过的内容来看,我需要为我试过的子查询的部分添加别名,但我仍然无法让它工作。

最佳答案

使用:

SELECT * 
  FROM (SELECT media.id AS id2, media.flagged AS flagged2, media.item_status AS status2 
          FROM media 
         WHERE flagged2 != 'nsfw' 
           AND status2 != 'deleted' 
      ORDER BY id2 DESC LIMIT 0, 5) x
  JOIN media on info.mid = media.id 
 WHERE info.topic = 'food_drink' 
    OR info.topic='cooking' 
GROUP BY info.mid

看到 x,就在括号外面但在联接之前?这就是错误所在。 FROM 之后和 JOIN 之前的括号内的东西是派生表(又名内联 View ),MySQL 要求您为其指定表别名。然后,当您从其中引用任何列时,您将使用 x.id2/etc。

关于sql - 连接上的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3106644/

相关文章:

mysql - 如何在mySQL中同时 'alias'表和所有列?

mysql - 将关键数据存储到 MySQL 数据库中

php - 如何在 CakePHP 查找查询中正确嵌套自定义字段?

mysql - 每个派生表必须有自己的别名——找不到错误

mysql - 单个select语句错误 "Every derived table must have its own alias"

mysql - sql 合并行成列(多对多的情况)

sql - 表中外键列位置的最佳实践

SQL连接所有值都存在的表的有效方法

php - 为什么在以下场景中无法访问资源 ID?

MySQL错误代码1248