我正在尝试从数据库中的列中选择一个随机行。
我需要查询来搜索/确保所选的随机行不等于存储在其他两列中的任何值。
示例:
数据库名称: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()
答案 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;