我一直在使用sql,试图更好地掌握我对它的使用,它一直很顺利,直到我得到这行代码:
INSERT INTO
citizens(lName,fName,gender,weight,psychosis,skank,status,is_pregnant,conceptionDate)
SELECT l.lastname, f.name, f.gender, '1','1','1','1','1','1' FROM firstNames f, lastName l
LIMIT 1
我不确定我做了什么,但代码继续广告。我希望它只插入几条记录,但截至目前已插入超过5万条记录。
因为人们在这里要求它是每列的数据类型:
cid int(11)
fName text
lName text
性别枚举('男性','女性')
体重,精神病,臭鼬,状态和ConceptionDate都是INT
is_pregnant enum('yes','no')
其中一些正在进行更新/重命名(名称状态现在是rStatus而is_pregnant有'in_labor'的第三个选项),但这不会影响其他任何内容。
答案 0 :(得分:1)
由于您正在使用交叉连接,因此将存在n * m个条目(其中n在lname中没有行,m在fname中是行数。)
因此,明智的做法是'INNER JOIN'
(如果名字和姓氏都是强制性的)或'LEFTJOIN'
(如果姓氏不是强制性的话)。
INSERT INTO
citizens(lName,fName,gender,weight,psychosis,skank,status,is_pregnant,conceptionDate) values
(SELECT l.lastname, f.name, f.gender, '1','1','1','1','1','1' FROM firstNames f INNER JOIN lastName l ON f.id=l.id LIMIT 1)
。
希望这会奏效。
答案 1 :(得分:0)
您缺少加入表格。
SELECT l.lastname, f.name, f.gender, '1','1','1','1','1','1'
FROM firstNames f INNER JOIN lastName l on f.someID = l.someID
LIMIT 1
答案 2 :(得分:0)
如果"概念日期"列是varchar / date类型列。 如果你插入' 1' in" conceptionDate"作为日期列,它会给你一个错误。