MySQL : Return random value from each column

标签 mysql

注意:这可能是一个奇怪的问题。

我有一个包含名字和姓氏的表,其架构如下(表名称:random_names):

id          INT             PRIMARY, AUTO INCREMENT
first_name  VARCHAR(100)    NOT NULL
last_name   VARCHAR(100)    NOT NULL

我想使用查询从 first_namelast_name 获取随机值。目前我使用 2 个查询来获取值:

SELECT first_name FROM random_names ORDER BY rand()
SELECT last_name FROM random_names ORDER BY rand()

但我希望我可以在 1 个结果输出中输出随机结果列表。我错过了什么?

最佳答案

select
    (select first_name from random_names order by rand() limit 1) as random_first_name, 
    (select last_name from random_names order by rand() limit 1) as random_last_name;

尽管对于任何大小的表,如果您以编程方式确定条目数并为每列选择随机偏移量,速度会快得多:

select
    (select first_name from random_names order by rand() limit $first_name_offset,1) as random_first_name, 
    (select last_name from random_names order by rand() limit $last_name_offset,1) as random_last_name;

其中偏移量是一个从 0 到小于 select count(*) from random_names 结果的随机数。

后续问题:

but how about list out result count equal to the number of values in original table? (just like shuffle the data in the table)

我会这样做:

create temporary table rand_last (id int(11) primary key auto_increment, last_name text) select last_name from random_names order by rand();
create temporary table rand_first (id int(11) primary key auto_increment, first_name text) select first_name from random_names order by rand();
select first_name, last_name from rand_first inner join rand_last using (id);

或者可能像这样(假设 random_names 有一个“id”主键):

create temporary table rand_one (id int(11) primary key auto_increment, random_names_id int(11)) select id random_names_id from random_names order by rand();
create temporary table rand_two (id int(11) primary key auto_increment, random_names_id int(11)) select id random_names_id from random_names order by rand();
select rand_first.first_name, rand_last.last_name from rand_one inner join rand_two using (id) inner join random_names rand_first on rand_one.random_names_id=rand_first.id inner join random_names rand_last on rand_two.random_names_id=rand_last.id;

关于MySQL : Return random value from each column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14097072/

相关文章:

asp.net - 在服务器而不是数据库中拥有(可能)数千个目录的缺点?

mysql - rails : has_many through with multiple foreign keys?

mysql 按日期选择所有同名的最新版本

mysql - Laravel Eloquent 或Where 问题

PHP echo xyz 如果循环中的行不包含数据

mysql - 如何使用MySQL高效同步多个客户端之间的数据?

php - MySQL 表格单元格添加

php - 简单地尝试更新 mysql 数据库中的项目

mysql - Magento 使用 csv 数据流导入客户(700k)太慢

java - JDBC 将多个子表连接到父表,我如何知道结果行来自哪个表?