我的问题涉及从一个cdv文件将数据复制到多个表中。我的桌子是
CREATE TABLE IF NOT EXISTS apt_info
(
house_number varchar(10) NOT NULL,
block varchar(3) NOT NULL,
owner_id int,
KEY owner_id (owner_id),
CONSTRAINT apt_owner FOREIGN KEY (owner_id) REFERENCES owner_info(owner_id),
tenant_id INT,
KEY tenant_id (tenant_id),
CONSTRAINT apt_tenant FOREIGN KEY (tenant_id) REFERENCES tenant_info(tenant_id),
CONSTRAINT apt_id PRIMARY KEY (block, house_number)
other columns storing different apt related values
);
CREATE TABLE IF NOT EXISTS owner_info
(
owner_id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
firstname varchar(80),
lastname varchar(80),
other column storing different owner related values
);
我有一个CSV文件,其中包含公寓详细信息,包括每行中的所有者名称。由于我想将所有者信息存储在不同的表中,并且同一所有者可能有多个公寓,因此我创建了一个临时表
Title,FirstName,Last Name,block,house_number,Sq. Foot Mr,Debraj,Gupta,A,101,1709 ,Laxman, ,A,102,1463 ,Laxman, ,A,103,1418 Mr,T A,Padmanabhan,A,104,1821
我创建了一个temp_owner_info
表,其中包含每列的字段,并使用LOAD DATA
插入这些记录。然后我用
owner_info
表
INSERT INTO owner_info (title, firstname, lastname)
SELECT DISTINCT title, firstname, lastname
FROM temp_owner_info;
现在我想用apt_info
中的block,house_number,sq_ft详细信息和temp_owner_info
表中的owner_id填充owner_info
表
我该怎么做?我想要的owner_id可以通过比较名字和姓氏来获得。我是SQL的新手,无法编写比较多个表的值所需的select语句。
我认为更容易将owner_id列添加到temp_owner_info表并在使用信息填充apt_info之前从owner_info获取自动生成的值 但是,以下查询最终会出现错误消息
更新temp_owner_info tmp set owner_id = o.owner_id 来自owner_info为o 哪里 tmp.firstname = o.firstname和 tmp.lastname = o.lastname;
错误消息:错误代码1064,SQL状态42000:您的SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在'from owner_info附近'使用正确的语法 哪里 tmp.firstname = o.firstname和 第3行的tmp.lastname = o.las' 第1行第1列
答案 0 :(得分:0)
试试这个:
Insert into apt_info (block, house_number, sq_ft, owner_id)
SELECT toi.block, toi.house_number, toi.sq_ft,
(select oi.owner_id from owner_info oi
where oi.firstname = toi.firstname
and oi.lastname = toi.lastname) owner_id
from temp_owner_info toi