在 SQL 中合并 2 个查询

Posted

技术标签:

【中文标题】在 SQL 中合并 2 个查询【英文标题】:merging 2 queries in SQL 【发布时间】:2020-02-06 05:17:58 【问题描述】:

我的数据库中有 40k 条记录。我已经编写了 2 个 SQL 查询来获得一些结果!不幸的是,它需要很长时间才能运行并且服务器给出超时错误!

我是 SQL 新手,所以任何人都可以帮助我合并我的查询,以减少执行时间!

这是我的代码

$sql="SELECT Website, COUNT(*) FROM entry GROUP BY Website HAVING COUNT(*) = 2 "; 
        $run = mysql_query($sql);
        while($row=mysql_fetch_array($run))
        
              $Website = $row['Website']; 
              $sql2 = "SELECT * FROM entry where Website= '$Website' GROUP BY Address ";
              $run2 = mysql_query($sql2);
              while($row=mysql_fetch_array($run2))
              
                $id = $row['id'];
                $Website = $row['Website'];
                $Name = $row['Name'];
                $Address = $row['Address'];
                $Country = $row['Country'];
                $City = $row['City'];
                
           

建议我!

【问题讨论】:

您的代码易受 SQL 注入攻击。您应该使用准备好的语句。 【参考方案1】:

在服务器端 (php) 上运行 SQL 查询时的一个关键规则是,您应该永远不要在循环内执行 SQL 查询。发生的情况是,对于循环的每次迭代,服务器都会连接并从数据库中获取数据。这增加了数据库上的输入输出操作,导致数据获取速度变慢,如果数据量很大,甚至可能导致服务器停机。

考虑使用正确的查询并从查询本身中整理出来,避免使用 PHP。

$sql2 = "SELECT * FROM entry where Website in (SELECT Website FROM entry GROUP BY Website HAVING COUNT(*) = 2) ";

别担心,这是每个人的学习方式。快乐编码!

【讨论】:

是的,但是当我在 Phpmyadmin 中运行它时出现错误 ---> 错误 SQL 查询:文档 SELECT * FROM entry where Website in (SELECT Website FROM entry GROUP BY Website HAVING COUNT(*) = 2) LIMIT 0, 25 MySQL 说:Documentation #2013 - Lost connection to MySQL server during query – 由于我不知道条目表中有什么,我可能无法提供正确的解决方案。但我想您必须尝试替换查询中的 * 并放置更准确的内容。这可以解决问题,甚至使查询更快。除非你真的想要所有的列,否则使用 * 不是一种专业的方法。【参考方案2】:

您可以使用它。在 where 条件下使用。

$sql="SELECT * FROM entry where Website in (SELECT Website FROM entry GROUP BY Website HAVING COUNT(*) = 2) "; 
        $run = mysql_query($sql);
        while($row=mysql_fetch_array($run))
        
                $id = $row['id'];
                $Website = $row['Website'];
                $Name = $row['Name'];
                $Address = $row['Address'];
                $Country = $row['Country'];
                $City = $row['City'];              
           

【讨论】:

是的,但是当我在 Phpmyadmin 中运行它时出现错误 ---> 错误 SQL 查询:文档 SELECT * FROM entry where Website in (SELECT Website FROM entry GROUP BY Website HAVING COUNT(*) = 2) LIMIT 0, 25 MySQL 说:Documentation #2013 - Lost connection to MySQL server during query – –

以上是关于在 SQL 中合并 2 个查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL 合并总和选择一个结果

在 SQL Server 中合并查询中的行

mybatis查询结果如何合并为列表

SQL - 如何避免将三个查询合并为一个

求助:SQLSERVER多条查询语句合并

是否可以在 SQL 中合并到 SELECT 中?