无法单独选择行而不分组
Posted
技术标签:
【中文标题】无法单独选择行而不分组【英文标题】:Can't select rows individually without grouping 【发布时间】: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。看到了吗?
【参考方案1】:
我在评论中提到的 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 中没有'
);或者更好的是,查看参数化查询
【讨论】:
以上是关于无法单独选择行而不分组的主要内容,如果未能解决你的问题,请参考以下文章
C# - 将 HTML 字符串切割成单独的行而不破坏 HTML 标签