【问题标题】: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。看到了吗?

标签: php html mysql sql select


【解决方案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 中没有');或者更好的是,查看参数化查询

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2020-08-27
    • 1970-01-01
    相关资源
    最近更新 更多