2013-01-08 66 views
2

我正在重构几年前由其他人编写的Java程序,无法与他们联系以查找有关SQL /数据库的任何内容,但是此查询不是工作(当分别具有两个查询时不返回任何结果)。我知道没有更多的信息会烦恼,但目前我没有太多选择。SQL Inner Join查询返回没有结果

"SELECT " + CLMHDR + ".POLBRC, " 
+ CLMHDR + ".POLTYC, " + CLMHDR + ".POLNOC," + CLMHDR + ".CLTKYC, " 
+ POLHDR + ".INCPTP FROM "+ CLMHDR + 
"INNER JOIN " + POLHDR + " ON " + CLMHDR + ".CLTKYC = " + POLHDR+ ".CLTKYP" 
+ " WHERE POLNOC = "+ polnocSearch 
+ " AND POLBRC = '" + polbrcSearch + "'" 
+ " AND POLTYC = '" + poltycSearch + "'" 
+ " AND DATRPC <= " + claimDate 
+ " GROUP BY POLBRC, POLTYC, POLNOC, CLTKYC" 

的表CMLHDR和POLHDR确实包含它引用的列,CLTKYC和CLTKYP在每个表的键。对于这些可怕的名字感到抱歉,我们也被RPG卡住了。

编辑: 什么工作是这样的:

"SELECT POLBRC, POLTYC, POLNOC, CLTKYC FROM "+ CLMHDR 
+ " WHERE POLNOC = "+ polnocSearch 
+ " AND POLBRC = '" + polbrcSeach + "'" 
+ " AND POLTYC = '" + poltycSearch + "'" 
+ " AND DATRPC <= " + claimDate 
+ " GROUP BY POLBRC, POLTYC, POLNOC, CLTKYC" 

其次是这样的:

"SELECT INCPTP, TRMTHP FROM "+ POLHDR + " WHERE POLNOP = "+ polnocSearch 
+ " AND POLBRP = '"+ polbrcSearch+ "' AND POLTYP = '"+ poltycSearch + "'" 

,但我真的很喜欢所有的数据在一次被退回。

+3

此代码看起来很适合[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)。 – Oded

+3

首先打印实际的sql语句并查看是否有错误 – Madhivanan

+0

在缩小WHERE子句的同时尝试声明。它可能确实没有结果。如果它不抛出错误,则不会有结果。如果它确实抛出,谨慎分享? – Jacco

回答

2

除了inner join问题,你有一个问题group by。它应该有INCPTP。在除MySQL以外的任何数据库中,这会产生一个错误。

顺便说一句,它会更容易回答你的问题,如果它包括两个方面:

  1. 您使用
  2. 得到的查询字符串填充
值数据库引擎
+0

啊,补充说,工作。谢谢,我没有意识到小组必须包括所有选定的列。 – Carasel

3

还有就是FROM和INNER JOIN子句之间缺少一个空格:

FROM "+ CLMHDR + 
"INNER JOIN 

它应该是这样的:

FROM "+ CLMHDR + 
" INNER JOIN 
+0

谢谢,这将是一个问题修复,但不幸的是它仍然无法正常工作。 – Carasel