【问题标题】:get random code not exists mysql获取随机码不存在mysql
【发布时间】:2009-12-07 12:53:09
【问题描述】:

我有这个 sql

select concat( char(FLOOR(97+ RAND()*26))
                   , char(FLOOR(97+ RAND()*26))
                   , FLOOR(100+ RAND()*999)
                   , char(FLOOR(97+ RAND()*26))) AS randomcode 
WHERE NOT EXISTS (
       SELECT *
       FROM table
       WHERE code_felt = randomcode );

但我无法让它工作。有人知道我在这里做错了什么吗?

我需要随机制作一个 6 图表代码,它在我的代码中不存在。希望能帮到我。

【问题讨论】:

    标签: sql mysql not-exists


    【解决方案1】:

    您必须从某处选择。您的 SELECT 没有表名。由于您实际上并未从表中选择随机值,因此您应该使用 DUAL(这是一个“假”表):

    select concat(
      char(97+ RAND()*26),
      char(97+ RAND()*26),
      floor(100+rand()*900),
      char(97+ RAND()*26)) 
    as randomcode from dual
      WHERE NOT EXISTS (SELECT * FROM table WHERE code_felt = randomcode );
    

    这有时会选择一条记录,有时不会选择记录。如果它没有选择记录,你必须重复查询,我想不出一种方法让它总是选择一条记录。

    【讨论】:

    • 完美,我不知道我可以使用双桌(假货)的坦克,非常好,坦克很多:)
    • 如果我只在随机车中使用 whst a-z,你能帮我解决这个问题吗? :)
    • Unknown column 'randomcode' in 'where clause'。为什么这是赞成甚至解决方案?
    • 我写这篇文章已经 11 年了。它确实奏效了。但它不能移植到所有数据库。你的数据库是mysql吗?
    【解决方案2】:

    试试这个:

    select CONCAT(char(rand()*26+65),char(rand()*26+65));
    

    【讨论】:

    • 是吗?现在我只需要在代码表中未使用代码时搜索代码。 :)
    • @NeoNmaN:我怀疑是否有可能完成纯 SQL - 您可能需要一个存储过程来在循环中生成这些 id,直到找到一个唯一的
    猜你喜欢
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多