Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-通过匹配引用从多个表中获取数据_Mysql_Database_Join_Phpmyadmin_Relationship - Fatal编程技术网

MySQL-通过匹配引用从多个表中获取数据

MySQL-通过匹配引用从多个表中获取数据,mysql,database,join,phpmyadmin,relationship,Mysql,Database,Join,Phpmyadmin,Relationship,我尝试使用联接查询从不同的表中获取数据。但即使有数据,它也没有返回任何结果 学生主表包含有关学生的详细信息。学生的卷号是此表中的主键。将卷号添加到所有结果表中(即第一项结果、第二项结果等),以供参考 所以,为了获取学生的详细信息,他的第一学期和第二学期的结果,我使用了下面的查询,它没有给出预期的结果。我正在试图获取与卷号匹配的详细信息 SELECT a.*, b .*,c.* FROM student_master AS a INNER JOIN first_term_results AS b

我尝试使用联接查询从不同的表中获取数据。但即使有数据,它也没有返回任何结果

学生主表包含有关学生的详细信息。学生的卷号是此表中的主键。将卷号添加到所有结果表中(即第一项结果、第二项结果等),以供参考

所以,为了获取学生的详细信息,他的第一学期和第二学期的结果,我使用了下面的查询,它没有给出预期的结果。我正在试图获取与卷号匹配的详细信息

SELECT a.*, b .*,c.*
FROM student_master AS a
INNER JOIN first_term_results AS b
INNER JOIN second_term_results AS c
ON a.roll_no = b.roll_no = c.roll_no
WHERE a.roll_no = '53'
AND b.roll_no='53'
AND c.roll_no = '53'
有人能帮我更正这个查询以得到我期望的结果吗?如果我不清楚,也请告诉我。我可以解释

提前感谢。

将您的查询修改为

SELECT a.*, b.*,c.*
FROM student_master AS a
INNER JOIN first_term_results AS b ON a.roll_no = b.roll_no
INNER JOIN second_term_results AS c ON a.roll_no = c.roll_no
WHERE a.roll_no = '53'

这应该符合你的愿望:

SELECT a.*, b .*,c.*
FROM student_master AS a
LEFT JOIN first_term_results AS b ON(a.roll_no = b.roll_no)
LEFT JOIN second_term_results AS c ON( a.roll_no = c.roll_no)
WHERE a.roll_no = '53'

您是否检查了驱动程序是否返回了错误?

将查询格式化为可读内容后,我得到了以下信息

SELECT a.*, b .*,c.* 
FROM   student_master AS a 
  INNER JOIN first_term_results AS b 
  INNER JOIN second_term_results AS c ON a.roll_no = b.roll_no = c.roll_no 
WHERE   a.roll_no = '53' 
AND     b.roll_no='53'
AND     c.roll_no = '53'
我觉得有点奇怪, 我喜欢这样的东西

SELECT a.*, b .*,c.* 
FROM   student_master AS a 
  INNER JOIN first_term_results AS b on a.roll_no = b.roll_no 
  INNER JOIN second_term_results AS c ON a.roll_no = c.roll_no 
WHERE   a.roll_no = '53' 

以上所有答案都很有效。谢谢大家。这个答案有点不同,因为如果第二个学期结果表中没有条目,你也会得到一个结果。所以你也会得到他们没有写第二学期的学生的成绩。#@BigB(第一学期成绩相同)。看到区别了吗?存在左连接而不是内部连接。我不知道你到底想不想。你必须决定我还没试着离开加入。我现在就试试。但这有什么不同。我可以看到roll_没有重复的字段。我怎样才能限制为一个呢?所有3个表都有roll_no字段,因此如果您写入a.*、b.*、c.*,那么这个字段当然会重复3次。如果您不想这样做,那么您必须编写字段名来代替*示例:a.field1、a.field2、a.roll\u no、b.field3、c.field3等等。。。