0

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

有没有一种方法可以让我在一个电话中获得所有问题和所有部分而不会重复?

谢谢

4

2 回答 2

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
于 2013-05-07T10:57:58.797 回答
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 表终于加入了问题表。

于 2013-05-07T11:03:39.340 回答