1

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

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

我在这里看到了这个线程。所以我尝试了

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

我在查询表达式中收到错误语法错误(缺少运算符)RAND() LIMIT 1。于是我厌倦RANDOM()RAND()。同样的错误。

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

4

4 回答 4

3

Ypercude 提供了一个链接,让我找到了下面的正确答案:

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

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

于 2013-11-08T21:54:36.903 回答
2

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

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

其中 ID 是表的主键。

于 2016-10-09T13:37:02.773 回答
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

感谢和尊重

于 2013-11-09T07:01:49.277 回答
-1

尝试这个:

SELECT TOP 1 *
FROM tbl_name
ORDER BY NEWID()

当然,这可能对大型表有性能考虑。

于 2013-11-08T21:48:32.703 回答