Mysql SQL连接难题

Mysql SQL连接难题,mysql,sql,join,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

这里是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   
问题

tnum     snum    num_of_qs
-------------------------
1        1        6
1        2        7
tnum     qnum     
-------------
1        1        
1        2   
每个表显然都有更多的数据

问题在于
部分
表格和
问题
表格之间没有链接,除了
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个问题

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


谢谢

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

问题:

  • qnum
  • 怠慢
部分

  • snum
  • 特努姆
测验

  • 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

试试上面的sql语句。我创建了一个带有连接测试和节表的虚拟“ts”表。此ts表最终与问题表连接。

所需的结果集应该是什么样子?您能重新格式化数据库吗?我认为问题在于你的建模。考试由一个或多个部分组成,一个部分由一个或多个问题组成。问题应该是snum,qnum。@raina77ow在返回AJAX调用之前,我循环并将集合排序为数组,然后使用json_编码,所以我并不介意。关键是我只想要一组答案。我想我可以。我之前决定不这么做有几个原因,但这不是不可逆转的。我也可以打个单独的电话去看电影。尼克,raina77ow的问题不是问你回答了什么。这是为了理解您真正想要什么,从提供的示例中,您应该显示预期的结果。@nick如果问题属于部分,那么将问题数据独立于部分数据是没有任何好处的。在我提出问题时,实际上您独自回答了这个问题,但实际上这可能有些过分。我应该咬紧牙关,将部分数据添加到问题表中+1:)是的,Fthiella,因为我在这里使用子查询虚拟表。这会降低性能。