忽略从数据库中读取冗余值(Ignore redundant values fetched from

2019-10-16 13:45发布

以下是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,有两行外面一排是多余的。 例如错误Id 3726链接错误Id 45326错误Id 45326链接错误Id 3726存在两次在O / P,其中有我们只需要一个行并忽略这类重复行 (具有无论是在重复的值的错误ID列或链接错误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代码中提取多余的重复行?

Answer 1:

如果这仅仅是关于治疗(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确保有没有最终结果。



Answer 2:

您可以尝试一些与此类似:

select 
distinct bug_id from
(
    select bug_id as bug_id from TABLE
 union
    select linked_bug_id as bug_id from TABLE
)


文章来源: Ignore redundant values fetched from database