我有这样一张桌子:
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)
这可能吗?我知道我可以执行两个单独的连接,但后来我留下了两行,没有迹象表明哪个名字是老师,哪个是学生
我正在尝试创建一个数据库来存储一些测验的问题和答案
到目前为止,我有两个表:
questions: (Question ID(PK), question string, correct answer ID)
answers: (Answer ID(PK), answer string, question ID)
我在设置外键约束时遇到了麻烦。当然,我需要确保该表中存在该对象correct answer ID,answers并且该表中也存在该对象。但是,当尝试在SQliteStudio中添加这些外键时,出现错误,这表明当已经存在来自B> A的外键约束时,无法添加引用表A> B的外键。question IDanswersquestions
我试图从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?
这是怎么回事?或者我怎么能解决我的问题