这里的SQL难题。
以简化形式,我有3个表:
测试
tnum name
-------------
1 A
2 B
部分
tnum snum num_of_qs
-------------------------
1 1 6
1 2 7
问题
tnum qnum
-------------
1 1
1 2
每张表显然都有比这更多的数据。
问题是除了section
之外,question
表和tnum
表之间没有链接。我正在进行这个SQL调用:
SELECT * FROM test t
LEFT JOIN section s ON s.tnum = t.tnum
LEFT JOIN question q ON q.tnum = t.tnum...
会发生的是每个部分都会发送一整套问题。因此,如果有100个问题分为17个部分,我会得到1700个问题。
有没有办法可以在一次通话中获得所有问题和所有部分而无需重复?
由于
答案 0 :(得分:1)
您的数据库结构应该是(只剩下必须填写的字段,不包括名称列等):
问题:
节
测试
(粗体 - 主键)
然后您的查询应该是:
SELECT
q.qnum,
s.snum,
t.tnum
FROM
questions q
LEFT JOIN sections s ON q.snum = s.snum
LEFT JOIN tests t ON s.tnum = t.tnum
答案 1 :(得分:1)
SELECT
ts.tnum,
ts.name,
ts.snum,
ts.num_of_qs,
q.qnum
FROM
(SELECT
t.tnum,
t.name,
s.snum,
s.num_of_qs
FROM test t
LEFT JOIN section s ON s.tnum = t.tnum) As ts
LEFT JOIN question q ON q.tnum = ts.tnum
尝试上面的sql语句。我用连接测试和节表创建一个虚拟的“ts”表。这个ts表最后加入了问题表。