我正在尝试使用RANDOM函数从表中选择随机行。
我要做的是,类别1的行有50%的可能性被选中,而类别2的行有25%的机会被选中。
在我的测试数据库中,table1中只有三条记录。它们与表2相结合以获得类别。
所有三个记录都有第1类。
如果我运行以下SQL
SELECT T2.category, T1.*
FROM table1 T1
LEFT JOIN table2 T2 ON T1.id=T2.id
WHERE
( T2.category=1 AND (TRUNC(RANDOM() * 100 ) < 50) ) OR
( T2.category=2 AND (TRUNC(RANDOM() * 100 ) < 25) )
我总是得到零或全部3条记录。如果我删除最后一行,那么SQL看起来像这样
SELECT T2.category, T1.*
FROM table1 T1
LEFT JOIN table2 T2 ON T1.id=T2.id
WHERE
( T2.category=1 AND (TRUNC(RANDOM() * 100 ) < 50) )
)
一切都按预期工作。记录随机出现(我有时会得到0,1,2或3条记录),但当然我无法根据类别区分被选中的机会。
为什么?我不明白我删除的行可以影响返回的记录数,因为我的所有记录都是类别1(我删除的行是category = 2)