使用JOIN语句时,三个表中的数据重复

时间:2014-06-26 18:35:22

标签: php mysql sql

当我使用JOIN从表中检索数据时,行重复。表格数量为三个。

Students
--------
StuID |    Name     |
1     | Appiah John | 
2     | Minister A  |

Levels
------
| LevelID | Level | Year  | StuID |
|  08     |  100  | 2010  |  2    |
|  83     |  200  | 2011  |  1    |
|  45     |  200  | 2011  |  2    |


Ranks
-----
| RankID | Rank | StuID |
|   101  | 1st  |  1    |
|   404  | 4th  |  2    |

这是我的查询语句,用于从三个表中选择一些数据

SELECT 
    m.StuID,
    n.Level,
    n.Year,
    o.Rank
FROM
    Students m 
          INNER JOIN
                  Levels n
              ON
                  m.StuID=n.StuID
          INNER JOIN
                    Ranks o
              ON
                   m.StuID=o.StuID
WHERE
      m.StuID=2;

输出

上面的查询会产生重复的答案

| StuID | Level | Year  |Rank  |
|  2    |  100  | 2010  | 4th  |
|  2    |  200  | 2011  | null |  
|  2    |  100  | 2010  | 4th  |
|  2    |  200  | 2011  | null | 

渴望输出

我希望输出如下所示

| StuID | Level | Year  |Rank  |
|  2    |  100  | 2010  | 4th  |
|  2    |  200  | 2011  | null | 

问题

  1. 我哪里错了?
  2. 加入是从这三个表中选择数据的最佳方法吗?
  3. 如何进行查询以获得所需的输出?

3 个答案:

答案 0 :(得分:0)

信不信由我认为Students mINNER JOIN之间的逗号正在这样做。您现在从两个单独的元组中进行选择,加入任何子句而不是将第一个表连接到第二个到第三个表。

答案 1 :(得分:0)

尝试执行左连接而不是内连接:

SELECT    m.StuID,
          n.Level,
          n.Year,
          o.Rank
FROM      Students m
LEFT JOIN Levels n ON (m.StuID = n.StuID)
LEFT JOIN Ranks o ON (m.StuID = o.StuID)
WHERE     m.StuID = 2

答案 2 :(得分:0)

如何使用select distinct m.StuID

您可以尝试这样的事情

SELECT distinct m.StuID, n.Level, n.Year, o.Rank 
    FROM Students m INNER JOIN Levels n ON m.StuID=n.StuID 
    INNER JOIN Ranks o 
    ON m.StuID=o.StuID WHERE m.StuID=2;