如何选择MySQL数据库中的随机行?

时间:2018-03-16 18:40:41

标签: mysql sql database select

我正在尝试从数据库中的列中选择一个随机行。

我需要查询来搜索/确保所选的随机行不等于存储在其他两列中的任何值。

示例:

数据库名称:database_name

TABLE1包含一列:male_id

TABLE2包含两列:number_list1和number_list2

我需要一个查询,它会在找不到number_list1或number_list2的male_id列中找到一个随机数。反正有没有这样做?这是我最好的拍摄(导致错误):

SELECT male_id FROM TABLE1 WHERE male_id IS NOT (SELECT number_list1 FROM TABLE2) 
AND (SELECT number_list2 FROM TABLE2) ORDER BY RAND()

3 个答案:

答案 0 :(得分:0)

这样的事情应该有效。

一般来说,你真的想避免在mySQL中使用子查询

SELECT male_id FROM TABLE1 t1 
  LEFT JOIN TABLE2 t2 on t1.male_id = t2.number_list1
  LEFT JOIN TABLE2 t3 on t1.male_id = t3.number_list2
where t2.number_list1 is null and t3.number_list2 is null
 ORDER BY RAND();

答案 1 :(得分:0)

您正在寻找NOT IN(或NOT EXISTS)。假设子查询中没有值是NULL,您可以这样做:

SELECT t1.male_id
FROM TABLE1 t1
WHERE t1.male_id NOT IN (SELECT t2.number_list1 FROM TABLE2 t2) AND
      t1.male_id NOT IN (SELECT t2.number_list2 FROM TABLE2 t2)
ORDER BY RAND()
LIMIT 1;

出于各种原因,我更喜欢NOT EXISTS

SELECT t1.male_id
FROM TABLE1 t1
WHERE NOT EXISTS (SELECT 1 FROM TABLE2 t2 WHERE t2.number_list1 = t1.male_id) AND
      NOT EXISTS (SELECT 1 FROM TABLE2 t2 WHERE t2.number_list2 = t1.male_id)
ORDER BY RAND()
LIMIT 1;

为了提高性能,您需要TABLE2(number_list1)TABLE2(number_list2)上的索引。

答案 2 :(得分:0)

试试这个:

SELECT male_id 
FROM TABLE1 A
WHERE NOT EXISTS
(SELECT NULL 
   FROM TABLE2 B
   WHERE B.number_list1=A.male_id
   OR B.number_list2=A.male_id)   
ORDER BY RAND()
LIMIT 1;