【发布时间】:2016-03-04 19:17:39
【问题描述】:
我有一个 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'
)";
【问题讨论】:
-
尝试 JOIN,在大多数情况下它可能也会更快。
-
mm 好的,我将如何构建它?
-
发布了一个例子作为答案
-
您的问题是因为它仅从
Students表中选择而引起的。Students表中只有一行具有每个 Student_ID,因此无论SearchStudent中有多少行,您只会在输出中获得一行(对于每个值)。该测试仅将Students中的每一行限定为包含或排除。正如@Uueerdo 所说,如果您想要所有组合,请使用 JOIN。 -
我会尽量解释得更好。我的 SQL 查询的第二部分有效,它创建了一个包含所有相关行的表,有些行相等,有些不相等。我想要的是一个循环,它告诉它遍历我刚刚创建的所有行,并在我的另一个表 Student 中找到其中一个值,然后为该值选择 Programme、Class 和 Year。例如:第 1 行:3,4。从 studid=4 的学生中选择 Programme、Class 和 Year。第 2 行:3,4。从 studid=4 的学生中选择 AGAIN Programme、class 和 year。看到了吗?