2017-07-13 1 views
1

Ich bin neu in SQL und habe mich gefragt, ob es eine Möglichkeit gibt, eine Tabelle nach Instanzen mit Werten aus einer Spalte einer externen Tabelle zu durchsuchen (CSV-Datei). Um dies klarer zu erklären, arbeite ich gerade daran: Wenn eine Spalte in der CSV-Datei die Breitengrade und eine andere Spalte die Längenangaben enthält. Ich möchte eine Tabelle durchsuchen, die Informationen zu mehreren Standorten enthält, deren Breite und Länge in der Tabelle angegeben sind.SQL - Laden von Daten aus einer CSV-Datei und Verwenden dieser Daten zum Suchen nach Instanzen in einer anderen Tabelle

Ich möchte die Informationen über diesen bestimmten Ort mit Latitudes und Longitudes als Eingabe aus einer CSV-Datei abrufen.

Würde es ungefähr so ​​aussehen? : Hier als gegeben

\copy MyTable FROM 'C:\Users\Admin\Desktop\Catalog.csv' WITH CSV; 

->http://postgresguide.com/utilities/copy.html:

CREATE TABLE MyTable( 
    latitude DECIMAL(5, 2) NOT NULL, 
    longitude DECIMAL(5, 2) NOT NULL 
); 

LOAD DATA INFILE 'C:\Users\Admin\Desktop\Catalog.csv' 
INTO TABLE MyTable 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 

SELECT 
    main.object_id, 
    main.latitude, 
    main.longitude, 
    main.Some_Information 

FROM 
    location_info AS main, 
    MyTable AS temp 

WHERE 
    main.latitude = temp.latitude AND 
    main.longitude = temp.longitude 

Ich habe auch versucht psql 'S \ kopieren dergleichen. Aber das hat auch nicht funktioniert. Es gab einen Fehler in der Nähe von "\" bei oder in der Nähe von Kopie, aber dies könnte wegen der Anwesenheit einer älteren Version von psql sein. Auch ich bin kein Superuser, daher die Verwendung von \ COPY kopieren und nicht.

Ich habe auch versucht, eine temporäre Tabelle zu verwenden und \ neben es kopieren. Es gab denselben Fehler wie oben.

+0

Willkommen zu SO, CrunchyMint. Sie haben in Ihrer Frage mehrere verschiedene Datenbanken markiert. Wenn Sie PostgreSQL verwenden, wie es Ihr Post impliziert, entfernen Sie bitte Ihre Tags "mysql" und "sql-server", da es sich um völlig unterschiedliche RDMS handelt. – Jacobm001

+0

Was ist der genaue Fehler, den Sie bekommen? – Jacobm001

+0

Sorry, ich habe sie bearbeitet. – CrunchyMint

Antwort

0

PostgreSQL unterstützt die von Ihnen verwendete Syntax LOAD DATA nicht. Sie müssen stattdessen COPY verwenden.

Ihr Workflow sollte aussehen wie:

CREATE TABLE MyTable( 
    latitude DECIMAL(5, 2) NOT NULL, 
    longitude DECIMAL(5, 2) NOT NULL 
); 

COPY MyTable(latitude, longitude) 
FROM 'C:\Users\Admin\Desktop\Catalog.csv' WITH CSV; 

SELECT 
    main.object_id, 
    main.latitude, 
    main.longitude, 
    main.Some_Information 
FROM 
    location_info AS main 
    JOIN MyTable AS temp 
    on main.latitude = temp.latitude 
    and main.longitude = temp.longitude 

Es gibt drei Haupt Dinge hier zu bemerken.

  1. Ich habe entfernt Ihre \ vom COPY Befehl.
  2. Ich habe die Spalten angegeben, in die Sie mit dem Befehl COPY einfügen möchten. Wenn sich die Spalten in einer anderen Reihenfolge in der CSV-Datei befinden, ordnen Sie sie einfach im Ausdruck COPY neu an.
  3. Ich habe die Syntax Ihres Joins zu einem Standard-ANSI-Join geändert. Die Logik ist die gleiche, aber aus Gründen der Lesbarkeit/Kompatibilität ist dies ein besserer Standard.
Verwandte Themen