1

我正在尝试进行查询以过滤一个表中的行,然后将结果连接到另一个表上,然后过滤掉其他行。

这是我写的查询:

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

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

4

1 回答 1

3

采用:

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 之前括号内的内容是派生表(AKA 内联视图),MySQL 要求您为其指定表别名。然后,当您从其中引用任何列时,您将使用x.id2/etc。

于 2010-06-24T01:26:20.670 回答