SQL INSERT ... SELECT继续无限插入

时间:2015-10-19 06:08:10

标签: mysql

我一直在使用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'的第三个选项),但这不会影响其他任何内容。

3 个答案:

答案 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"作为日期列,它会给你一个错误。

Fiddle Demo