'Compare two columns in PostgreSQL and conditionally select the rows

I have following postgres table.

entry_id  generic_name     uniprot_acc  stable_identifier  synonym          uniprot
D09574    ziv-aflibercept  A0A024RD33   D99937             ziv-aflibercept  P49765
D09574    ziv-aflibercept  A0A024RD33   D99937             ziv-aflibercept  P49763
D09574    ziv-aflibercept  A0A024RD33   D99937             ziv-aflibercept  P15692
D09574    ziv-aflibercept  A0A024RD33   D99937             ziv-aflibercept  P49765
D09574    ziv-aflibercept  A0A024RD33   D99937             ziv-aflibercept  P49763
D09574    ziv-aflibercept  A0A024RD33   D99937             ziv-aflibercept  P15692
D09574    ziv-aflibercept  P49763       D99937             ziv-aflibercept  P49765
D09574    ziv-aflibercept  A0A024RD33   D99937             ziv-aflibercept  P49765
D09574    ziv-aflibercept  A0A024RD33   D99937             ziv-aflibercept  P49763
D09574    ziv-aflibercept  A0A024RD33   D99937             ziv-aflibercept  P15692
D09574    ziv-aflibercept  Q86TW6       D99937             ziv-aflibercept  P49765
D09574    ziv-aflibercept  Q86TW6       D99937             ziv-aflibercept  P49763
D09574    ziv-aflibercept  Q86TW6       D99937             ziv-aflibercept  P15692
D09574    ziv-aflibercept  Q7LAP4       D99937             ziv-aflibercept  P49765
D09999    ziv              Q86TW6       D99936             ziv              P49763
D09999    ziv              Q86TW7       D99936             ziv              Q86TW6
D09999    ziv              Q86TW8       D99936             ziv              Q86TW7

Is there a way to compare values in columns uniprot_acc against uniprot column. If uniprot_acc value exist in uniprot, then exclude else include entry_id, generic_name, uniprot_acc.

The expected output is:

D09574  ziv-aflibercept A0A024RD33
D09574  ziv-aflibercept Q86TW6
D09574  ziv-aflibercept Q7LAP4
D09999  ziv             Q86TW8

D09574 ziv-aflibercept P49763 is excluded because 'P49763' exists in uniprot column.

Any help is highly appreciated.



Solution 1:[1]

I believe this will do what you want:

SELECT entry_id, generic_name, uniprot_acc
  FROM table
EXCEPT
SELECT entry_id, generic_name, uniprot
  FROM table;

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Kombajn zbo?owy