我正在尝试执行查询以过滤来自一个表的行,然后将结果连接到另一个表,然后过滤掉其他行。
以下是我写的查询:
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
我认为我非常接近让查询正常工作,但我不断收到消息,“每个派生表都必须有自己的别名。”我用谷歌搜索了这个,从我读过的内容中我需要为我尝试过的子查询的部分别名但我仍然无法使它工作。
答案 0 :(得分: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。