mysql - 主键搜索有多个结果

标签 mysql database

我的 MySQL 查询遇到问题。我目前正在尝试制定一个程序,为特定预订随机填充带有魔术技巧的桥接表。

经过几个小时的努力,我已将问题范围缩小到这行代码。

SELECT *
FROM avaliable_tricks WHERE table_id = FLOOR(RAND() * 144)+1;

我正在尝试使用随机生成的数字来检索技巧的信息,该数字将等于其主键。它应该只获取一个条目,因为它使用主键,并且主键是唯一值。事实上,它会无缘无故地抓取 0、1、2 或更多条目。 IE。它只返回 4 行,主键为 2、5、47 和 107。

除了它是随机生成的数字之外,我想不出它不起作用的任何原因。

我的代码中是否有本质上的错误?

编辑: 这是在我的临时表上运行的 DESCRIBE。

table_id    int(11) NO  PRI     auto_increment
show_trick_id   int(11) YES         
trick_length    int(11) YES         
recommended_age int(11) YES         

最佳答案

RAND() 对表中的每一行执行一次并生成不同的值。如果只想获取一个随机数,可以使用子查询(派生表);

SELECT *
FROM avaliable_tricks 
CROSS JOIN (SELECT FLOOR(RAND() * 144)+1 as rnd) r
WHERE table_id = r.rnd;

或者只使用变量

SET @rnd = SELECT FLOOR(RAND() * 144)+1;
SELECT *
FROM avaliable_tricks 
WHERE table_id = @rnd;

关于mysql - 主键搜索有多个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42658753/

相关文章:

php - 记录或比较mysql运行前后的数据-逆向工程

database - VM 上的永久磁盘与 Kubernetes 集群的托管数据库

mysql - 为什么这个 mysql 表副本会生成重复行

php - PDO - PHP fatal error : Call to a member function execute() on a non-object in

c# - 如何在 Unity3D 中使用 LINQ to MySQL?

php - 在 php foreach 循环中回显 SQL PDO 对象

PHP CMS 教程,写出 html 文件

c# - C# 多用户应用程序中的技术,其中所有客户端都从中央数据库获取最新数据

python - sqlalchemy 外键找不到表

SQL 查询以匹配行和列