【发布时间】:2014-08-01 09:15:59
【问题描述】:
我有两个表 TESTS 和 TESTS_ATTEMPTED。我正在尝试为给定 USER_ID 的每种测试类型(数学、英语、科学)输出下一个测试的 ID。
表格的结构如下(带有一些示例数据):
TESTS
================
ID TEST_NAME TEST_TYPE
1 Science 1 Science
2 Maths 1 Maths
3 Maths 2 Maths
4 Science 2 Science
TESTS_ATTEMPTED
================
ID TEST_ID USER_ID
1 1 2
2 1 1
3 2 2
4 3 2
这里有一个带有这个虚拟数据的 SQL 小提琴:http://www.sqlfiddle.com/#!2/43efb/2
预期结果将是(对于用户 ID 2):
TEST_TYPE NUM_TESTS NUM_TAKEN NEXT_TEST_ID
Science 2 1 4
Maths 2 2 Null
我已经能够创建一个包含用户测试次数的查询,但不确定是否可以输出下一个测试类型?
SELECT count(*) as num_tests_taken,
TEST_NAME from TEST_NAMES tn
INNER JOIN TESTS_ATTEMPTED ta on tn.ID = ta.TEST_ID AND ta.USER_ID = 2
GROUP BY tn.ID
如何将查询连接在一起并输出下一个要使用的 TEST ID?
非常感谢任何帮助。
【问题讨论】:
-
这与您提出的上一个问题有何不同? stackoverflow.com/questions/23917976/…
-
嗨@Strawberry - 这个更具体,希望更清晰
-
不。只需删除这个,澄清旧的,然后添加评论(所以,在 cmets 部分)只是提到这就是你所做的。
-
我想说你的数据模型会让你的生活变得困难。在多用户系统中预测下一个 ID 将很难正常工作。更好的方法是等到您需要创建下一个测试尝试,然后在事务块中获取为您创建的 id。或者,如果您需要无缝 ids 在事务块中自己增加它。在您的方法中,多个用户可能将 id 4 作为 net id,这应该是不可能的。假设 id 也是你的 PK。