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
这里主要注意三点。
- 我已经从
COPY
命令中删除了您的 \
。
- 我已经用
COPY
命令指定了您要插入的列。如果列在 CSV 文件中的顺序不同,只需在 COPY
表达式中重新排序即可。
- 我已将您的连接语法更改为标准 ANSI 连接。逻辑是一样的,但由于 readability/compatibility 原因,这是一个更好的标准。
我是 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
这里主要注意三点。
- 我已经从
COPY
命令中删除了您的\
。 - 我已经用
COPY
命令指定了您要插入的列。如果列在 CSV 文件中的顺序不同,只需在COPY
表达式中重新排序即可。 - 我已将您的连接语法更改为标准 ANSI 连接。逻辑是一样的,但由于 readability/compatibility 原因,这是一个更好的标准。