我是SQL的新手,我想知道是否有任何方法可以在表中搜索具有外部表(csv文件)列值的实例。为了更清楚地解释这一点,我正在研究的是:如果csv文件中的列包含纬度而另一列包含经度;我想搜索一个表格,其中包含有关多个地点的信息,并在表格中指定了纬度和经度。
我想从纬度和经度中检索有关该特定位置的信息作为csv文件的输入。
看起来像这样吗? :
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
我也尝试过使用psql的\ copy,如:
\copy MyTable FROM 'C:\Users\Admin\Desktop\Catalog.csv' WITH CSV;
如此处所示 - > http://postgresguide.com/utilities/copy.html。 但这也不起作用。复制时或附近的“\”附近有错误,但这可能是因为存在较旧版本的psql。 此外,我不是超级用户,因此使用\ copy而不是COPY FROM。
我还尝试使用临时表并在其旁边使用\ copy。它给出了与上面相同的错误。
答案 0 :(得分:0)
PostgreSQL不支持您正在使用的LOAD DATA
语法。您需要改为使用COPY
。
您的工作流程应该更像:
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
这里有三点需要注意。
\
命令中删除了COPY
。 COPY
命令指定了您要插入的列。如果CSV文件中的列的顺序不同,只需在COPY
表达式中重新排序。