无法单独选择行而不分组

5
我有一个SQL查询,旨在从我的学生表中获取程序、班级和年份,给定两列X和Y的数字。例如,如果x=3且y=4,则意味着学生3和4之间存在联系,并且为了我们的论点,我将从学生4中选择节目、班级和年份。
问题是,如果有两行X和Y相等,例如: 行1:X=3,Y=4 行2:X=3,Y=4
(因为可能有两个连接),SELECT语句将仅选择程序、类别和年份一次,而不是两次。我希望它可以单独选择重复的内容,以便稍后的循环可以打印出两次结果。
我希望我讲得清楚!
$SQL = "
  SELECT Programme, Class, Year 
  FROM Students
  WHERE  Student_ID in (
    SELECT X
    FROM SearchStudent
    WHERE Y= '$id'
  )";

好的,我该如何构建它? - Fidelio
你的问题是由于它仅从Students表中进行选择引起的。每个Student_IDStudents表中只有一行,因此无论在SearchStudent中有多少行,输出中只会得到一行(对于每个值)。测试仅将Students中的每一行限定为包含或排除。正如@Uueerdo所说,如果要获取所有组合,请使用JOIN。 - Turophile
我会尝试更好地解释。我的SQL查询的第二部分有效,它创建了一个包含所有相关行的表格,有些相等,有些不相等。我想要的是像一个循环一样,让它遍历我刚刚创建的所有这些行,并在我的其他表格“学生”中查找其中一个值,并选择该值的“课程”,“班级”和“年份”。例如:行1:3,4。从学生中选择“课程”,“班级”和“年份”,其中studid=4。行2:3,4。再次从学生中选择“课程”,“班级”和“年份”,其中studid=4。你明白吗? - Fidelio
你是在使用 PHP 脚本进行查询吗?如果是的话,包含这个信息可能会有所帮助。 - user5051310
@Nockingam 在MySQL中,或者我相信大多数关系型数据库管理系统中,没有真正的“行号”。你可以在MySQL中使用LIMIT [结果数量],[偏移量]来模拟这种行为;但是如果没有完全合格的ORDER BY子句,那么这种方法是不可靠的。 - Uueerdo
显示剩余2条评论
1个回答

1
我提到的JOIN操作可能看起来像这样:

在评论中提到的JOIN操作可能会类似于:

SELECT s.Programme, s.Class, s.Year 
FROM SearchStudent AS ss
INNER JOIN Students AS s ON ss.X = s.Student_ID
WHERE ss.Y= '$id'
;

不要忘记对输入进行消毒处理(即确保$id中没有');或者更好的方法是查看参数化查询。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接