2017-08-16 143 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的,假为巴),很容易处理结果集时将它们分开。