Mysql,嵌套EXISTS语句的正确方法是什么
我试图将EXISTS语句放在EXISTS语句中,我的版本不起作用。 可能吗Mysql,嵌套EXISTS语句的正确方法是什么,mysql,Mysql,我试图将EXISTS语句放在EXISTS语句中,我的版本不起作用。 可能吗 SELECT SUM(nbview) AS num_rows FROM `Release_link` WHERE EXISTS (SELECT id FROM Release WHERE Release.id = Release_link.release_id AND EXISTS (SELECT id
SELECT SUM(nbview) AS num_rows
FROM `Release_link`
WHERE EXISTS (SELECT id
FROM Release
WHERE Release.id = Release_link.release_id
AND EXISTS (SELECT id
FROM Article
WHERE Article.id = Release.article_id
AND Article.type = 'lol'));
感谢Jorge Campo提供的解决方案;放弃引用某物 问题是您在第一次选择时引用了Release_链接,而在第一次子选择时没有引用它。你要么同时引用,要么不引用
SELECT SUM(nbview) AS num_rows
FROM `Release_link`
WHERE EXISTS (SELECT id
FROM Release
WHERE Release.id = `Release_link`.release_id
AND EXISTS (SELECT id
FROM Article
WHERE Article.id = Release.article_id
AND Article.type = 'lol'));
或
同样对于性能问题,在这种特殊情况下,更倾向于使用内部联接操作。假设这些ID字段上有索引,Mysql引擎将更好地处理索引
SELECT SUM(Release_link.nbview) AS num_rows
FROM Release_link
INNER JOIN Release
ON (Release.id = Release_link.release_id)
INNER JOIN Article
ON (Article.id = Release.article_id)
WHERE Article.type = 'lol';
我做到了,但它不起作用ahah phpmyadmin return:1064-您的SQL语法有一个错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“Release WHERE Release.id=Release\u link.Release\u id AND EXISTS SELECT id FROM Ar”附近使用的正确语法,您在第一次选择中引用了Release\u link。。。报价上的存在选择alsoahaha哇谢谢;它现在起作用了:如果我没有引用第一个选择,它会起作用吗?此外,这是获得最佳性能的最佳方法吗?从性能角度来看,这取决于表的关系,最好使用连接,而不是内部查询。我明白了,但使用这个我可以得到0.0003秒,而使用Select SUMrl.nbview作为Release\u link rl internal JOIN Release r ON r.id=rl.Release\u id a.id=r.Article\u id和a.type='lol'上的num\u行,我可以得到相同的性能。。。我的数据库还很年轻,但哪一个会更好。。。如果我使用left join,它将返回比我想要的更多的条目…感谢jorge抽出时间:
SELECT SUM(Release_link.nbview) AS num_rows
FROM Release_link
INNER JOIN Release
ON (Release.id = Release_link.release_id)
INNER JOIN Article
ON (Article.id = Release.article_id)
WHERE Article.type = 'lol';