从MySQL中选择未存在的值

时间:2011-05-12 11:15:05

标签: mysql select random unique

有一个表“tbl”,其特定范围内的唯一值“val”(例如,从100到999)。

需要选择保证值,该保证值在表中尚不存在的情况下,如果没有附加表的帮助,所有现有值都超过左关联。

例如。

辅助表填充(整个范围),值为1到9。

基本表格结构:

CREATE TABLE `ranger` (
  `val` int(2) unsigned NOT NULL,
  UNIQUE KEY `val` (`val`)
) ENGINE=MyISAM;

INSERT INTO `ranger` (`val`) VALUES (1), (2), (4), (5), (6), (7), (8);

ranger选择不存在的值:

SELECT 
    val
FROM 
    ranger_helper
WHERE 
    val NOT IN(SELECT val FROM ranger)
ORDER BY 
    RAND() 
LIMIT 
    1

2 个答案:

答案 0 :(得分:0)

SELECT id FROM myTable WHERE id NOT IN (100,101,102,103...,999);
如果您可以轻松地从外部推导出范围,

可以起作用

另一种方法可能是创建一个存储过程,并使用WHILE循环或查询为表中的每个值派生范围。

答案 1 :(得分:0)

MySQL中没有数字生成器。看到这个问题和答案:

How do I make a row generator in MySQL?

在最好的情况下,您可以使用反连接从该范围派生它:

select id from foo where id not in (...);