加入了3个表,没有输出第三个表的所有结果?

时间:2016-03-04 11:20:07

标签: mysql sql join

我有三张桌子:

Student - UPN, Name, Year, House

Seclusion_Status - ID, Arrived, FTE, Rebuild, DateTimeAdded, Staff, Student_UPN (fk), Comment

Period_Rating - ID, Slot_ID, Rating, Date, Seclusion_ID (fk)

每个学生可以在Seclusion_Status表中有许多条目,然后Period_rating表中还有许多条目,它们使用Seclusion_ID

链接到Seclusion_status表

我正在运行以下查询以根据日期从Seclusion_Status返回记录,然后在Period_rating表中返回与Seclusion_status记录相关的所有记录。

$sql="SELECT * FROM Seclusion_Status 
      INNER JOIN Students ON Seclusion_Status.Student_UPN=Students.UPN 
      JOIN Period_Rating ON Seclusion_Status.ID=period_rating.Seclusion_ID
      WHERE period_rating.Date = '$start'
      GROUP BY period_rating.Seclusion_ID 
      ORDER BY Seclusion_Status.DateTimeAdded ASC";
    $result=mysql_query($sql);
        // Start looping rows in mysql database.
        while($rows=mysql_fetch_array($result)){

查询返回Seclusion_Status记录,然后返回Period_rating中的第一条记录,但不返回其他记录。

 Array
[0] => 348
[ID] => 157
[1] => Y
[Arrived] => Y
[2] => N
[FTE] => N
[3] => 
[Rebuild] => 
[4] => 
[Text] => 
[5] => 2016-03-04 09:30:50
[DateTimeAdded] => 2016-03-04 09:30:50
[6] => Mr S Holland
[Staff] => Mr S Holland
[7] => K80222800
[Student_UPN] => K8022280
[8] => Refusing instructions
[Incident] => Refusing instructions
[9] =>  
[Period] =>  
[10] => 
[Period_In_ID] => 
[11] => Not sitting properly in class despite being asked
[Comment] => Not sitting properly in class despite being asked
[12] => K80222800
[UPN] => K80222800
[13] => Student Name
[Name] => Student Name
[14] => Year 9
[Year] => Year 9
[15] => Acer
[House] => Acer
[16] => 157
[17] => P2
[Slot_ID] => P2
[18] => 
[Rating] => 
[19] => 2016-03-04
[Date] => 2016-03-04
[20] => 348
[Seclusion_ID] => 348
[21] => 1
[Status] => 1

2 个答案:

答案 0 :(得分:0)

问题是如果你使用连接,如果所有三个表中都有数据,那么它只会被提取。

如果你想获取表中的所有条目,你需要使用外连接,遗憾的是你不能在mysql中使用外连接。

但您可以通过联合leftjoin结果和右联接结果来获取结果

答案 1 :(得分:0)

  

查询返回Seclusion_Status记录,然后返回Period_rating中的第一条记录,但不返回其他记录。

你有GROUP BY period_rating.Seclusion_ID指示mysql为Seclusion_ID返回一条记录。取出group by子句,查询将返回多个匹配的记录。