mysql - 导入 CSV 从现有表中提取一列字段

标签 mysql sql

我正在学习 MySQL 和 PHP(运行 XAMPP 并使用 HeidiSQL),但有一个实时工作项目,我试图使用它来代替当前包含信息的无数电子表格。

我想将 1,000 多行导入到表 (tbl_searches) 中,其中其中一列是字符串 (contract_no)。 tbl_searches 所需的电子表格中没有的信息包括 search_id(PK 并且是 AUTO_INCRMENT)和contract_id。所以我真正缺少的唯一字段是contract_id。我有一个表(tbl_contracts),其中包含contract_id和contract_no。所以我想我可以让导入使用字符串contract_no来引用该表来获取contract_no的contract_id,但我不知道如何做。

[编辑]我忘了提及,在将 tbl_contracts 导出到 Excel 后,我已使用 HeidiSQL 成功导入了信息,然后使用 Excel VLOOKUP 函数,但最终以某种方式产生了不正确的数据。

最佳答案

你可以这样做

LOAD DATA LOCAL INFILE '/path/to/your/file.csv' 
INTO TABLE table1 
  FIELDS TERMINATED BY ',' 
         OPTIONALLY ENCLOSED BY '"' 
  LINES TERMINATED BY '\n' -- or '\r\n' if the file has been prepared on Windows
(@field1, @contract_no, @field2, @field3,...) 
SET column1 = @field1,
    contract_id = (SELECT contract_id 
                     FROM tbl_contracts 
                    WHERE contract_no = @contract_no 
                    LIMIT 1),
    column2 = @field2,
    column3 = @field3
    ...

关于mysql - 导入 CSV 从现有表中提取一列字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18160035/

相关文章:

mysql - 在 Laravel 中从 MySQL 字段插入和检索信息

php - Mysql比较值

mysql - Django 2.0 SQLite3 到 MySQL 加载数据错误 : "The database backend does not accept 0 as a value for AutoField."

sql - 如何从日期时间 SQL 中仅选择年份

MYSQL 为每个条目自动递增 16 位数字

mysql - 从 MYSQL 迁移到 PostgreSQL

sql - 替换 SQL 中的值 (Microsoft Access)

c# - sql server 从匹配的日期时间中选择最小值

c# - 我需要在 SQL 查询中转义哪些字符

sql - @ 是什么意思!在 From 语句中的意思