我有以下示例表。SQLITE:篩選出多列的行
1 2 3
A| |B -- Row 1
| |A -- Row 2
|B| -- Row 3
| | -- Row 4
A|A|A -- Row 5
C| |C -- Row 6
我的目的是系統地過濾'out'行(推測使用!= WHERE子句)。我知道如何使用= WHERE子句過濾'in'行,但不確定是否可以過濾'out'行。請看下面的三個例子:
1)過濾掉(即離開含B,C或空白的)任何行:
- >除了5行,因爲每隔一行包含這應返回的一切至少1 B,C或空白細胞
2)過濾掉和空白(即留下含有B或C)的任何行:
- >這應返回的行1,3,6,因爲每個這些行包含B或C 3)過濾出空白(即留下含有A,B或C)的任何行:
- >返回的行1,2,3,5,6離開了第4行,因爲這不包括A,B或C
甲函數來生成使用=子句將是一個查詢:
void filterInRows(String colFilter)
{
List uniqueCols = ['A', 'B', 'C', ''];
String query = 'SELECT * FROM Test WHERE ';
int filterCounter = 0;
uniqueCols.forEach((String col)
{
if(col != colFilter)
{
query += (filterCounter != 0) ? ' AND ' : '';
query += "One = '$col' OR Two = '$col' OR Three = '$col'";
filterCounter++;
}
});
query += ';';
}
例如,如果我們稱之爲filterInRows(「A」),那麼我們得到的:
SELECT * FROM Test WHERE One = 'B' OR Two = 'B' OR Three = 'B' AND One = 'C' OR Two = 'C' OR Three = 'C' AND One = '' OR Two = '' OR Three = '';
其解決了上面的第一個例子。不過,我被困在寫一個函數/查詢,讓我來達到同樣的事情,但過濾行了,而不是查詢,如以下不能達到這個原因很明顯:
SELECT * FROM Test WHERE One != 'A' OR Two != 'A' OR Three != 'A';
SELECT * FROM Test WHERE One != 'A' AND Two != 'A' AND Three != 'A';
我使用SQLite。上面的代碼是用Dart編寫的,但僅僅是一個例子 - 對於任何其他語言的計數器示例都很滿意。我的目的是過濾的東西了,而不是過濾器的東西。我相信你需要做到這一點使用!=,但我如果它們存在使用不同的關鍵詞是開放的另一種方法。如果我沒有清楚解釋這個問題,請告訴我。提前致謝。