mysql - SQL 连接难题

标签 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   

每个表的数据显然比这个多。

问题在于,除了 tnum 之外,section 表和 question 表之间没有任何链接。我正在执行此 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

部分

  • 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

关于mysql - SQL 连接难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16417103/

相关文章:

mysql - JPA 与 EclipseLink ManyToMany 关系不起作用

php mysql 保存查询结果

php - 如何在 MYSQLI - PHP 中使用逻辑运算符

像查询这样的 Mysql 查询在与其他表的 where 条件连接时不会发送准确的结果

sql - 在 SQL Server 2005 中使用 MD5 在 varbinary 上执行校验和文件

c# - linq to sql中如何判断是否使用join?

sql - SSRS 报告图表在 Outlook 中工作正常,但在 Gmail 和 Thunderbird 中不起作用

java - 选择每个项目的最新日期并在 sqlite 中获取总和

java - Hibernate/JPA 单向 OneToMany 与源表中常量值的连接条件

MySQL 左连接和分组依据