PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak połączyć dwie tabele, z których jedna nie ma klucza podstawowego i nie ma tej samej długości znaków?

Spróbuj porównać tylko pierwszych 8 znaków:

SELECT r.domainid, r.dombegin, r.domend, d.ddid 
FROM   domainregion r
JOIN   dyndomrun d ON r.domainid::varchar(8) = d.ddid 
ORDER  BY r.domainid, d.ddid, r.dombegin, r.domend;

Obsada niejawnie przycina końcowe znaki. ddid na początku ma tylko 8 znaków. Nie trzeba go też przetwarzać. Daje to to samo:

JOIN   dyndomrun d ON left(r.domainid, 8) = d.ddid 

Należy jednak pamiętać, że funkcja ciągu left() został wprowadzony dopiero w PostgreSQL 9.1. We wcześniejszych wersjach możesz zastąpić:

JOIN   dyndomrun d ON substr(r.domainid, 1, 8) = d.ddid

__

Podstawowe wyjaśnienie dla początkujących:

  • Zapytanie używa JOIN . Przeczytaj więcej na ten temat w instrukcji .

  • FROM domainregion r jest skrótem od FROM domainregion AS r . AS to po prostu szum w tym przypadku w PostgreSQL. Alias ​​tabeli sprawia, że ​​zapytanie jest krótsze i łatwiejsze do odczytania, ale nie ma tu żadnego innego wpływu. Możesz także użyć aliasów tabel, aby na przykład wielokrotnie dołączyć tę samą tabelę.

  • Warunek łączenia ON r.domainid::varchar(8) = d.ddid łączy ze sobą tylko te wiersze, w których oba wyrażenia dokładnie pasują. Ponownie przeczytaj o tych podstawach w podręczniku (lub jakiekolwiek inne źródło).

To proste zapytanie, nie trzeba tutaj wiele wyjaśniać.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak szybko zdobyć 13 rekordowej linii w pobliżu punktu (lon, lat) postgis

  2. Uzyskaj wartości z pierwszego i ostatniego wiersza na grupę

  3. PostgreSQL - grupowanie według kolumny jsonb

  4. PostgreSQL:Jak zaimplementować minimalną kardynalność?

  5. błąd psycopg, kolumna nie istnieje