加入两张桌子

时间:2014-11-21 11:29:34

标签: php mysql database inner-join jointable

我正在尝试加入一个dataofbirth列,该列位于studentdetails表中,另一个表名为college table,我需要第二个表中学生的dataofbirth。这是我的查询。

  $result = mysqli_query($con,"SELECT `DateofBirth` FROM  `studentdetails` INNER JOIN `college`
   ON `studentdetails`.StudentID = college.StudentID")or die ("Error: ".mysqli_error($con)");

因此,当我为第二个表获取我的数组时,我将能够获得他们的数据生成,而无需加入他们的身体。 谁能发现我的语法有什么问题?

谢谢

3 个答案:

答案 0 :(得分:1)

如果要连接两个表,则必须提供要包含在连接/组合表中的两个表的列列表。所以:

尝试此操作(将[add other columns ..]位替换为您可能要包含的其他列。并注意表别名如何使用它们:

  $result = mysqli_query($con,"SELECT s.DateofBirth, c.StudentID, [add other columns from college table here...] FROM  studentdetails sd INNER JOIN college c
   ON sd.StudentID = c.StudentID")or die ("Error: ".mysqli_error($con)");
哦,你可能想要使用mysqli而不是旧的,不赞成的,丑陋的,缓慢的,不安全的,自杀的想法导致mysql_扩展;)

答案 1 :(得分:0)

应该是(来自评论: dateofbirth 仅存在于studentdetails中)

  $result = mysqli_query($con,"SELECT sd.DateofBirth FROM  studentdetails as sd INNER JOIN college as c
    ON sd.StudentID = c.StudentID")or die ("Error: ".mysqli_error($con)");

答案 2 :(得分:0)

考虑到我们只出生一次(除了凤凰),学生与他们的出生日期之间的关系应该是1:1关系。换句话说,可以在DateOfBirth表中声明列college。然后选择他们的出生日期,您可以这样做:

select DateOfBirth
from   college
where  StudentID = :id

但是我看到你已经有了另一张表来存储他们的出生日期,所以你可以联系他们选择他们的出生日期:

select d.DateOfBirth
from   college        c,
       studentdetails d
where  c.StudentID = d.StudentID;

或者:

select d.DateofBirth 
from   studentdetails d
inner join college as c
   on d.StudentID = c.StudentID;

但是上面的查询会排除{* 1}}中没有记录的学生。要选择所有具有各自出生日期的学生,您可以这样做:

studentdetails

即使select c.StudentID, s.DateOfBirth from studentdetails d right join college c on d.StudentID = c.StudentID; 表格中没有出生日期,right join这个studentdetails查询也会得到所有学生。right join cmd就在学院上学。{/ p>

您可以自由地找出最适合您的选项,但我建议您将此DateOfBirth列放在college表格中来规范化此数据模型。