根据程序中的某个变量,有一个参数可以为NULL的select查询的最佳方法是什么?
我可以想到两个解决方案(伪代码):
bool valueIsNull;
int value;
query = "SELECT * FROM table WHERE field ";
if (valueIsNull)
{
query += "IS NULL";
}
else
{
query += "= ?";
}
statement st = sql.prepare(query);
if (!valueIsNull)
{
st.bind(0, value);
}
Run Code Online (Sandbox Code Playgroud)
要么
bool valueIsNull;
int value;
query = "SELECT * FROM table WHERE field = ? OR (? IS NULL AND field IS NULL)";
statement st = sql.prepare(query);
if (valueIsNull)
{
st.bindNull(0);
st.bindNull(1);
}
else
{
st.bind(0, value);
st.bind(1, value);
}
Run Code Online (Sandbox Code Playgroud)
只是一个简单的SELECT语句有很多代码,我发现它只是丑陋而且不清楚.
最干净的方式是:
bool valueIsNull;
int value;
query = "SELECT * FROM table WHERE field = ?"; // <-- this does not work
statement st = sql.prepare(query);
st.bind(0, value, valueIsNull); // <-- this works
Run Code Online (Sandbox Code Playgroud)
显然这不起作用.但有没有一个干净的方法来处理这个?
我认为这不重要,但我使用的是C++,cppdb和postgresql.
使用Postgresql(但我相信不是标准的)你可以使用
SELECT * from some_table where field IS NOT DISTINCT FROM ?;
Run Code Online (Sandbox Code Playgroud)
IS NOT DISTINCT FROM,与plain =不同,当双方都为NULL时为真.