mysql - 使用选择查询加载数据文件以进行数据查找

标签 mysql

我能够使用以下创建和加载数据文件命令成功加载文件:

--Create and load addresses
CREATE TABLE `addresses` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `address1` varchar(100) NOT NULL,
  `address2` varchar(100) DEFAULT NULL,
  `city` varchar(100) NOT NULL,
  `stateCode` varchar(2) NOT NULL,
  `zipCode` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=utf8;

LOAD DATA INFILE 'C:/temp/address.dat'    
    INTO TABLE mbc.addresses
    FIELDS
        TERMINATED BY X'1F'
    LINES
        TERMINATED BY X'1E'
    (name,address1,address2,city,stateCode,zipCode);

现在,我想使用加载到地址中的地址 ID 将数据从另一个文件 (receipt.dat) 加载到收据表中。目前,地址名称存储在receipt.dat 的“addressId”字段中。我想做这样的事情,但不确定正确的语法是什么:

--Create and load receipts
CREATE TABLE `receipts` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `receiptDate` date NOT NULL,
  `addressId` bigint(20) NOT NULL,
  `amount` decimal(10,0) NOT NULL,
  `notes` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `addressFK_idx` (`addressId`),
  CONSTRAINT `addressFK` FOREIGN KEY (`addressId`) REFERENCES `addresses` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

LOAD DATA INFILE 'C:/temp/receipt.dat'    
    INTO TABLE mbc.receipts
    FIELDS
        TERMINATED BY X'1F'
    LINES
        TERMINATED BY X'1E'
    (receiptDate, 
    select max(addressId) from mbc.addresses where name = @addressId,  
    amount, 
    notes);

格式化上面的 select max(addressId... 行(如果有的话)的正确方法是什么?

最佳答案

您可以设置addresId:

--Create and load receipts
CREATE TABLE `receipts` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `receiptDate` date NOT NULL,
  `addressId` bigint(20) NOT NULL,
  `amount` decimal(10,0) NOT NULL,
  `notes` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `addressFK_idx` (`addressId`),
  CONSTRAINT `addressFK` FOREIGN KEY (`addressId`) REFERENCES `addresses` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

LOAD DATA INFILE 'C:/temp/receipt.dat'    
    INTO TABLE mbc.receipts
    FIELDS
        TERMINATED BY X'1F'
    LINES
        TERMINATED BY X'1E'
    (receiptDate, amount, notes)
    SET addressId = select max(addressId) from mbc.addresses where name = @addressId;

希望对你有帮助。

关于mysql - 使用选择查询加载数据文件以进行数据查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19237105/

相关文章:

mysql - 无法删除带有 GROUP BY 和 HAVING 子句的语句

mysql - 对使用索引时查看 50 万行的 mysql 感到困惑

java - 如何从两个 HTML 表单/子表单向 MySql 数据库插入数据

mysql - 如何在sql查询中四舍五入两列的乘积

Mysql按行数进行子查询

mysql - 有没有办法可以简化这个 MySQL 查询?

php - 如何显示具有相同ID的多维数组(PHP,Laravel)

MySQL:从连接表中获取每个最新条目

php - 使用php将数据插入数据库的问题

mysql - Node js 中出现奇怪的问题(交换请求)