相关问题是在sql中获取null == null。但是该答案要求将搜索值写入2次(即:在我的PreparedStatement中有2个问号)!
排名第二和后续的答案提供了一种无需两次绑定搜索值即可执行此操作的方法:
SELECT * FROM ROUTERS
WHERE coalesce(ROUTER_ADDRESS, '') = coalesce( ?, '');
请注意,这需要一个伪值,该伪值永远不能是有效的列值(即“带外”)。我正在使用空字符串。如果没有任何这样的值,则必须忍受两次绑定该值:
SELECT * FROM ROUTERS
WHERE ROUTER_ADDRESS = ? or (ROUTER_ADDRESS is null and ? is null);