我需要在2,000个随机名称的区域中生成要插入到三个字段的MySQL表中:FirstName,LastName,Gender(根据ISO 5218)。为了帮助我,我列出了50个男性名字,50个女性名字和100个姓氏。如有必要,这些可能成为临时数据库表。我可以用Python编写一些代码(经过一些研究之后)但是觉得在MySQL中这样做可能是更明智的一步。但是我不知道如何编写SQL来实现这一目标。这可能吗?
谢谢...
答案 0 :(得分:3)
你可以创建一个FIRST_NAMES表,插入所有名字(男性和女性),然后创建一个LAST_NAMES表,然后创建RANDOM_NAMES表,例如:
INSERT INTO RANDOM_NAMES
VALUES (SELECT first FROM FIRST_NAMES
ORDER BY RAND()
LIMIT 1,
SELECT last FROM LAST_NAMES
ORDER BY RAND()
LIMIT 1)
ORDER BY RAND()
以随机顺序返回表格行,LIMIT 1
只返回第一行,这就是你想要的。
请注意,上面的代码插入了一行,因此如果要插入2000行,则需要进行迭代。对于迭代部分,this topic的第一个答案似乎是一个不错的选择。
然而,这似乎是一种非常低效的方式。更好的方法是使用INSERT-SELECT构造。你将在这里做的是创建一个包含FIRST_NAMES和LAST_NAMES表的笛卡尔积的表,随机排序行,并将查询限制为2000行,然后将这些行插入到新表中。
类似的东西:
INSERT INTO RANDOM_NAMES (first_name, last_name)
SELECT first, last
FROM FIRST_NAMES, LAST_NAMES
ORDER BY RAND()
LIMIT 2000
我不是SQL编码器,所以你可能想检查一下它是否有效。但它似乎是解决问题的最有效方法,因为您正在避免迭代。