java - 忽略从数据库中获取的冗余值

标签 java sql database oracle11g duplicate-removal

以下是 SQL 查询的示例 o/p -

  BUG_ID   |  LINKED_BUG_ID
-----------|-----------------
3726       |  45236
45236      |  3726
3726       |  45254
45254      |  3726
3726       |  45402
45402      |  3726
3726       |  1182
1182       |  55745

在我的 SQL o/p 中,有两行,其中一行是多余的。例如 Bug Id 3726Linked Bug Id 45326Bug Id 45326Linked Bug Id 3726 在 o/p 中出现了两次,其中我们只需要一行并忽略这种重复行(具有在Bug Id 列或Linked Bug Id 列中重复的值),而不影响包含不同值的 o/p。

目前我可以使用以下查询识别此类重复行,但我只需要此类重复行中的一行。

SELECT 
  BUG_ID, 
  LINKED_BUG_ID, 
  CASE 
    WHEN BUG_ID IN (select LINKED_BUG_ID FROM MY_BUG_LINKS) AND 
      LINKED_ISSUE_ID IN (SELECT BUG_ID FROM MY_BUG_LINKS) 
    THEN 'true' ELSE 'false'  
  END AS EQUAL 
FROM MY_BUG_LINKS;

以下是我在代码中用于获取所有行(甚至包括重复行)的 SQL 查询

SELECT BUG_ID, LINKED_BUG_ID FROM MY_BUG_LINKS;

如何避免在数据库级别本身或在我的 Java 代码中获取冗余的重复行?

最佳答案

如果这只是将 (B, A) 视为 (A, B) 的副本,并且您并不特别关心返回的行是否为 (A, B)(B, A),你可以这样做:

SELECT DISTINCT
  CASE WHEN BUG_ID > LINKED_BUG_ID THEN LINKED_BUG_ID ELSE BUG_ID AS BUG_ID,
  CASE WHEN BUG_ID > LINKED_BUG_ID THEN BUG_ID ELSE LINKED_BUG_ID AS LINKED_BUG_ID
FROM MY_BUG_LINKS;

也就是说,如果 BUG_ID 的值大于 LINKED_BIG_ID,查询将交换两个 ID,否则返回值不变。因此,(A, B)(B, A) 总是产生重复的行(两者都是 (A, B)(B, A)), DISTINCT 确保最终结果中没有。

关于java - 忽略从数据库中获取的冗余值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10073054/

相关文章:

java - 调用外部类和方法

java - Java中的音频指纹识别系统

java - 仅获取数组中的名字

sql - 如何使 PostgresQL 优化器在绑定(bind)参数后构建执行计划?

sql - MySQL 查询 : I need all "friendships" between different users

c# - 插入命令的单元测试

Java int除法让我困惑

MYSQL - SELECT IN () ORDER BY IN ()

sql - TFS 2010 备份失败,出现 "The current username failed to retrieve MSSQL Server service account. "

mysql - 数据库设计。一对多还是多对多?