SQL - 从 CSV 文件加载数据并使用该数据在另一个 table 中查找实例

SQL - Loading data from CSV file & using that data to find instances in another table

我是 SQL 的新手,我想知道是否有任何方法可以在 table 中搜索具有来自外部 table(csv 文件)列的值的实例.为了更清楚地解释这一点,这就是我正在做的事情:如果 csv 文件中的一列包含纬度而另一列包含经度;我想搜索 table,其中包含有关多个位置的信息,其纬度和经度在 table 中指定。

我想检索有关该特定位置的信息,其中包含纬度和经度作为 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.

我还尝试使用临时 table 并在其旁边使用 \copy。它给出了与上面相同的错误。

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  

这里主要注意三点。

  1. 我已经从 COPY 命令中删除了您的 \
  2. 我已经用 COPY 命令指定了您要插入的列。如果列在 CSV 文件中的顺序不同,只需在 COPY 表达式中重新排序即可。
  3. 我已将您的连接语法更改为标准 ANSI 连接。逻辑是一样的,但由于 readability/compatibility 原因,这是一个更好的标准。