以下是 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 3726 和 Linked Bug Id 45326 和 Bug Id 45326 和 Linked 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/