我无法在查询
上应用过滤器(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'行。
但它显示所有行都是正常的。 。 。 你能解决我的问题吗? 。 。 提前致谢。 :)
答案 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
值。
即使条件在第一个表格上也是如此。
另外,我建议您为表而不是A
和B
使用合理的别名。对于这两个表,我建议FD
和FCD
。