在Access中随机选择一行SQL

时间:2013-11-08 21:39:52

标签: sql ms-access

我有一个包含一些表的小型访问数据库。我正在尝试访问sql设计中的代码。我只是想在表格中随机选择一条记录。

我创建了一个名为StateAbbreviation的简单表。它有两列:IDAbbreviationID只是一个自动编号,Abbreviation是状态的不同缩写。

我在这里看到this帖子。所以我试过

SELECT Abbreviation
FROM STATEABBREVIATION
ORDER BY RAND()
LIMIT 1;

我在查询表达式RAND() LIMIT 1中收到错误语法错误(缺少运算符)。所以我累了RANDOM()而不是RAND()。同样的错误。

其他人都没有工作。我究竟做错了什么?谢谢。

4 个答案:

答案 0 :(得分:3)

Ypercude提供的链接让我得到了正确答案:

SELECT TOP 1 ABBREVIATION
FROM STATEABBREVIATION 
ORDER BY RND(ID);

请注意,对于RND(),我认为它必须是整数值/变量。

答案 1 :(得分:1)

每次打开Access并运行查询时,都需要变量时间种子才能获得相同的序列 - 并使用在Access中访问SQL

SELECT TOP 1 Abbreviation
FROM STATEABBREVIATION
ORDER BY Rnd(-Timer()*[ID]);

其中ID是表的主键。

答案 2 :(得分:0)

试试这个:

SELECT TOP 1 *
FROM tbl_name
ORDER BY NEWID()

当然,这可能需要考虑大型表的性能。

答案 3 :(得分:0)

请试试这个,对你有帮助

可以使用我创建的存储过程和函数,它有一个额外的列,您可以在表格中创建FLAG名称和列,所有字段值应为0然后它可以工作

create Procedure proc_randomprimarykeynumber
as
    declare @Primarykeyid int  

    select top 1  
        @Primarykeyid = u.ID 
    from 
        StateAbbreviation u  
    left join  
        StateAbbreviation v on u.ID = v.ID + 1 
    where 
        v.flag = 1 

    if(@Primarykeyid is null )
    begin
        UPDATE StateAbbreviation 
        SET flag = 0  

        UPDATE StateAbbreviation 
        SET flag = 1 
        WHERE ID IN (SELECT TOP 1 ID 
                     FROM dbo.StateAbbreviation)
    END
    ELSE
    BEGIN
        UPDATE StateAbbreviation 
        SET flag = 0 

        UPDATE StateAbbreviation 
        SET flag = 1 
        WHERE ID IN (@Primarykeyid)
    END 

    SET @Primarykeyid = 1 

    SELECT TOP 1 
        ID, Abbreviation 
    FROM
        StateAbbreviation 
    WHERE
        flag = 1

在存储过程中运行此命令并获得串行主键

exec proc_randomprimarykeynumber

谢谢并尊重