2017-08-16 170 views
0

的單獨組我有一個表,看起來像這樣:Col: A (string), B (int), C(string)JDBC - 一個查詢返回的結果

我希望能夠得到行,其中A比賽無論是正則表達式foo或正則表達式bar。目前,我執行兩個查詢:

SELECT * FROM myTable WHERE A LIKE fooSELECT * FROM myTable WHERE A LIKE bar

我相信會有這些結果集之間沒有重複。

我希望能夠通過運行一個查詢得到同樣的結果,這樣我就不必掃描表一次爲每個可接受值,例如:

SELECT * FROM myTable WHERE A LIKE foo OR A LIKE bar

我的問題是,這樣的查詢會生成一個結果集,其中所有的值混在一起 - 然後我需要循環使用自己的字符串比較來分離這兩個值。此外,匹配A LIKE foo的字符串可能會有很大的不同,所以我不能僅僅對A進行分組。

是否有一種方法可以執行表的單個遍歷(出於效率的原因),但是仍然可以通過JDBC/SQL將結果分成一個組:A LIKE foo和另一個組A LIKE bar

回答

2

如果你有信心,就沒有重複的,運行具有鑑別一個UNION ALL

SELECT 'foo' as which_regex, * 
FROM myTable 
WHERE A LIKE foo 
UNION ALL 
SELECT 'bar' as which_regex, * 
FROM myTable 
WHERE A LIKE bar 

JDBC將運行這個作爲一個單一的查詢,即使它有兩個部分。將會有一個名爲which_regex的額外「鑑別器」列添加到結果中,其中將包含字符串'foo'或字符串'bar'。您可以使用此列來決定將結果的每一行放在哪個「桶」中。

+0

你可以投票解除對'CASE'的回答。擁有兩個以上的團隊時也是可行的。 – Kayaman

+0

@Kayaman即使我喜歡這個答案,但我不確定這是否適合我取消刪除它,因爲作者想刪除它。 – dasblinkenlight

+0

@Kayaman和dasblinkenlight - 你能描述一下答案是什麼嗎?我沒有看到它,但我很好奇,如果我想添加任意數量的「OR」子句,哪種方法最好。 – MyStackRunnethOver

1

你可以添加一個額外的布爾列到結果集,甚至可以按它排序。

SELECT A LIKE foo AS group_foo, * FROM myTable WHERE A LIKE foo OR A LIKE bar ORDER BY 1; 

結果集的第一列然後告訴它屬於哪個組(真foo的,假爲巴),很容易處理結果集時將它們分開。