Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql,嵌套EXISTS语句的正确方法是什么_Mysql - Fatal编程技术网

Mysql,嵌套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

我试图将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 
                                 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';