无法单独选择行而不分组

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 标签

BigQuery 从嵌套数组中选择和别名字段而不分组

Bigquery - 选择一列而不将它们分组在按子句中

如何将 Konvajs Transformer 附加到多个形状而不分组?

分组 Java8 流而不收集它

选择“最高”X 行而不进行排序