Postgresql
使用連接時忽略重複項
我試圖在使用聯接時忽略表中兩個提供程序之間的重複項。
我現在正在使用這個查詢:
SELECT * FROM A AS a1, A AS a2 WHERE a1.provider <> a2.provider AND a1.etype = a2.etype
不幸的是,該查詢給了我重複項(兩行相同的提供程序,在相反的兩側)。
我試圖忽略在對面出現兩次的行,例如:
etype provider etype provider hello aaa hello bbb hello bbb hello aaa
這個dbfiddle 也說明了所需的輸出。
您必須將
<>
比較替換為<
or>
。否則,普通的 CROSS JOIN 會產生不包括主對角線的完整笛卡爾積。現在你得到下一個:
-- AB AC AD BA -- BC BD CA CB -- CD DA DB DC --
代替 :
-- AB AC AD -- -- BC BD -- -- -- CD -- -- -- --
所以你的查詢應該是這樣的:
SELECT * FROM A AS a1 CROSS JOIN A AS a2 -- my strong advise to use JOIN instead of ',' for readability WHERE a1.provider < a2.provider -- here is the comparison I've mean AND a1.etype = a2.etype ;
NB
正確的程式碼格式可以極大地提高理解能力。