sql >> Databasteknik >  >> RDS >> PostgreSQL

Sammanfoga två tabeller i en komplex fråga (inte enhetlig data)

SELECT DISTINCT ON (1)
       t.id, d.address, d.id
FROM   data_table t
JOIN   dictionary d ON replace(d.address, ' ', '')
                 LIKE (replace(t.address, ' ', '') || '%')
ORDER  BY t.id, d.address, d.id

(ORDER BY uppdaterad efter uppdatering av frågan.) Utan ORDER BY det är att välja en godtycklig matchning.
Förklaring till tekniken i detta relaterade svar:
Välj första raden i varje GROUP BY-grupp?

Ett funktionellt index i din ordbok skulle göra detta snabbt :

CREATE INDEX dictionary_address_text_pattern_ops_idx
ON dictionary (replace(address, ' ', '') text_pattern_ops);

Mer förklaring till det i svaret jag gav på den föregående frågan .

Man kan diskutera om det ger dig den "bästa" matchen. Ett alternativ skulle vara en likhetsmatchning med ett trigramindex. Detaljer i den första av länkarna som jag lade till i din senaste fråga.



  1. LOBBEHÅLLNING

  2. ClassNotFoundException När du kör JDBC genom Javas Servlets

  3. Skapa och få åtkomst till OLTP-databaser och tabeller i minnet

  4. PHPpgAdmin:Hur tar du bort rader utan att använda SQL