我正在尝试执行查询以过滤一个表中的行,然后将结果加入另一个表中,然后过滤掉其他行。
这是我写的查询:
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/