我有一个如下所示的表格:Col:A(字符串),B(整数),C(字符串)
我希望能够获取 A
与正则表达式 foo
或正则表达式 bar
匹配的行。目前,我执行两个查询:
SELECT * FROM myTable WHERE A LIKE foo
和 SELECT * FROM myTable WHERE A LIKE bar
我相信这些结果集之间不会有重复。
我希望能够通过运行单个查询来获得等效结果,这样我就不必为每个可接受的值扫描一次表,例如:
从 myTable 中选择 *,其中类似 foo 或类似 bar
我的问题是这样的查询会产生一个结果集,其中所有值都混杂在一起 - 然后我需要使用我自己的字符串比较来循环遍历以将两者分开。此外,匹配 A LIKE foo
的字符串可能非常不同,因此我不能只对 A
进行分组。
有没有一种方法可以执行表的单次遍历(为了效率),但仍然让 JDBC/SQL 完成将 A LIKE foo
的结果分成一组的工作,并且另一个A LIKE bar
小组?
最佳答案
如果您确信不会出现重复项,请使用鉴别器运行 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'
。您可以使用此列来决定将结果的每一行放入哪个“桶”中。
关于java - JDBC - 一个查询返回单独的结果组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45721654/