MySQL中的空结果集被转换为JDBC中

时间:2015-10-08 21:40:08

标签: java mysql jdbc spring-jdbc

我刚刚浏览了我的应用程序中的一些日志,并且发现了一个写得很糟糕的查询(由我编写)并且它经常被执行。该查询与子查询具有组连接的几个连接。

我尝试优化这个查询,并且我有一些在性能上更好的多倍,并且真的有助于我们的应用程序。

SELECT table1.*, GROUP_CONCAT(table2.gid) as gids, GROUP_CONCAT(table3.items) as items from table1 LEFT JOIN table2 using (ID) LEFT JOIN table3 USING (ID) WHERE table1.Status != 4 AND table1.ID = <insert_an_id> group by ID;

当我使用table1.ID执行此查询作为不存在的ID时,MySQL返回一个带有所有NULL的行的结果集,这真的很奇怪。它怀疑这是由于小组会议,但由于我的MySql知识有限,我无法确定。当我不在ID上过滤它时它工作正常。

要解决此问题,我在此查询中添加了一个HAVING子句。

 HAVING table1.ID IS NOT NULL

现在, MySql返回一个空集,但我注意到JDBC返回一行的结果集。此行中的所有元素都是Null。由于我使用Spring,我希望NamedParameterJDBCTemplate抛出EmptyResultSet异常。我使用的是JDBC 4,MySql 5.5.39和Java 6.

如果我能提供更多信息,请告诉我。提前感谢一堆。

编辑:来自GreyBreardedGeek&#39;的建议暂时解决了我的问题。我是多么愚蠢地想念这个小组。 然而,尽管MySql返回一个空集,它仍然听起来像JDBC中的一个非常模糊的行为。如果有人能够提供有关我为什么会看到这种行为的有效解释,那就太棒了。谢谢。

0 个答案:

没有答案