SQL加入难题

时间:2013-05-07 10:45:50

标签: mysql sql join

这里的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个问题。

有没有办法可以在一次通话中获得所有问题和所有部分而无需重复?

由于

2 个答案:

答案 0 :(得分:1)

您的数据库结构应该是(只剩下必须填写的字段,不包括名称列等):

问题:

  • qnum
  • SNUM

  • SNUM
  • tnum

测试

  • tnum

(粗体 - 主键)

然后您的查询应该是:

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表最后加入了问题表。