根據程序中的某些變量,具有可以爲NULL的參數的select查詢的最佳方式是什麼?sql select可以爲NULL的參數
我能想到的兩種解決方案(僞)的:
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);
}
或
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);
}
這只是一個簡單的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
顯然,這是行不通的。但是有沒有一種乾淨的方式來處理這個問題?
我不認爲它很重要,但我使用C++,cppdb和postgresql。
我沒有看到你的第一個或第二個例子沒有錯。 – mellamokb 2011-05-12 18:40:49
@mellamokb:我知道這兩個例子的工作,但我的問題是,在第一個例子中,查詢在兩種情況下不同,所以如果我想重複使用預準備語句,它會增加更多的複雜性。 (特別是當有更多的參數可能是NULL)。在第二種情況下,SQL更復雜,我必須將同一個變量綁定兩次。對於較大的查詢,我發現它變得混亂和模糊。 – rve 2011-05-12 20:39:30