小编Rog*_*vis的帖子

MySQL用FK表中的数据替换结果表中的外键

我有这样一张桌子:

id (PK)   name    teacher (FK)    student (FK)
   1      Ron         3               6
Run Code Online (Sandbox Code Playgroud)

老师和学生都在另一张叫做的桌子里people.

 people
 id (PK)   name   age
    3      Ali    42
    6      Jon    12
Run Code Online (Sandbox Code Playgroud)

我想执行查询以获取以下内容

name    teacher's name   student's name
 Ron         Ali              Jon
Run Code Online (Sandbox Code Playgroud)

这可能吗?我知道我可以执行两个单独的连接,但后来我留下了两行,没有迹象表明哪个名字是老师,哪个是学生

mysql sql database

11
推荐指数
2
解决办法
5383
查看次数

两个表,每个表都有一个外键引用彼此

我正在尝试创建一个数据库来存储一些测验的问题和答案

到目前为止,我有两个表:

questions: (Question ID(PK), question string, correct answer ID)

answers: (Answer ID(PK), answer string, question ID)

我在设置外键约束时遇到了麻烦。当然,我需要确保该表中存在该对象correct answer IDanswers并且该表中也存在该对象。但是,当尝试在SQliteStudio中添加这些外键时,出现错误,这表明当已经存在来自B> A的外键约束时,无法添加引用表A> B的外键。question IDanswersquestions

database sqlite foreign-keys

5
推荐指数
1
解决办法
5524
查看次数

MySQL RAND()奇怪的行为

我试图从SQL查询的结果中获取一个随机行.

我的查询如下

SET @rank = 0;
SELECT * FROM(
     SELECT (@rank:=@rank+1) AS num, ...
     FROM ...
     WHERE ....) as raw
WHERE raw.num = FLOOR(1 + (RAND() * @rank)) LIMIT 1
Run Code Online (Sandbox Code Playgroud)

一般的想法是来自内部查询结果的表的每一行都被赋予唯一的数字(num).我已经手动检查确实是这种情况,并且每行都有编号.

最后一行让我感到苦恼.就目前而言,WHERE num = FLOOR(1 + (RAND() * @rank)) LIMIT 1正在回归我想要的东西 - 只有一半的时间.它似乎返回正确范围内的随机行(对于我测试查询的示例,它是0-1299).但是,每三个查询中就有一个返回任何内容.

好吧,所以我想也许这是一个双精度问题,所以我尝试使用>=如下:WHERE num >= FLOOR(1 + (RAND() * @rank)) LIMIT 1.在这种情况下的结果令我感到困惑.使用此代码我总是得到一个结果,但返回的行数始终<100.

所以如果我们调用FLOOR(1 +(RAND()*@rank))x.当我使用=而不是>=确认x必须(在某些情况下)等于大于1000的数字时.但是,在使用时>=,满足条件的事实意味着x必须始终小于100?

这是怎么回事?或者我怎么能解决我的问题

mysql sql database

1
推荐指数
1
解决办法
465
查看次数

标签 统计

database ×3

mysql ×2

sql ×2

foreign-keys ×1

sqlite ×1