SQL select是查询不能正常工作

时间:2015-12-29 14:29:58

标签: sql

我无法在查询

上应用过滤器(where条件)
( ( UPPER(TRIM(A.FORM_ID)) LIKE '%'
      || UPPER(TRIM('FORM2'))
      ||'%' ) )

在上面的代码中,我像这样应用了过滤器

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

// Make connection
Connection connection = DriverManager.getConnection("jdbc:sqlserver://sqltest.ABC.com:1433;databaseName=test5;integratedSecurity=true");

除此部分外,查询提供了所有信息。此过滤器应仅显示' FORM2'行。

但它显示所有行都是正常的。 。 。 你能解决我的问题吗? 。 。 提前致谢。 :)

1 个答案:

答案 0 :(得分:1)

LEFT JOIN中第一个表的条件需要放在WHERE子句中。在第二个表中,在ON子句中。此外,子查询不是必需的。所以:

SELECT . ..
FROM FORM_DEFINITION A LEFT JOIN
     FORM_CONTAINER_DEFINITION B
     ON A.FORM_ID = B.FORM_ID
WHERE UPPER(TRIM(A.FORM_ID)) LIKE '%' || UPPER(TRIM('FORM2')) || '%';

逻辑实际上比上述规则更简单。无论LEFT JOIN子句中的条件如何,ON都会保留第一个表中的所有行。匹配的行从第二个表中获取值。不匹配的行获得NULL值。

即使条件在第一个表格上也是如此。

另外,我建议您为表而不是AB使用合理的别名。对于这两个表,我建议FDFCD