分类:
2008-04-22 21:18:02
关键字: sql random() rand() newid()
最近实现的一个系统中,遇到了这样的情况:
需要从数据库表中随机读取n条记录,必须保证每条记录都不相同.
原来的想法是弄两个链表,第一个读取对应数据库表中的所有记录,根据每个记录的ID来生成这个链表;第二个链表是有选定的随机读取的记录生成的,这样从第一个链表中选定的,就可以剪掉,以后就不会被选种,把选中的添加到第二个链表中.
后来发现,在不同的数据库中完全可以用SQL语句来实现随机选定不同记录.
这里把不同数据库实现的语句粘在这里,以供需要的人来参考.
Select a random row with MySQL:
SELECT column FROM table
ORDER BY RAND()
LIMIT 1
Select a random row with PostgreSQL:
SELECT column FROM table
Select a random row with Microsoft SQL Server:
SELECT TOP 1 column FROM table
ORDER BY NEWID()
Select a random row with IBM DB2:
SELECT column, RAND() as IDX
FROM table
ORDER BY IDX FETCH FIRST 1 ROWS ONLY
Select a random record with Oracle:
SELECT column FROM ( SELECT column FROM table ORDER BY dbms_random.value ) WHERE rownum = 1