Mysql 如何调节变量,使其接受IN子句中的所有值

Mysql 如何调节变量,使其接受IN子句中的所有值,mysql,Mysql,我很犹豫,我还没有找到解决办法,所以我转向这里。 快速解释一下,假设我想按如下方式过滤查询: SELECT name FROM students WHERE courseCode IN (17, 18, 19); 在这里,我将获得注册课程17或18或19的学生 现在,你如何让这三门课程的学生入学?也就是说,在17和18和19中 当您知道“courseCode”值是什么时,它可能很简单,但是当您通过子查询获得这些值时,您将如何做到这一点 大概是这样的: SELECT name FROM stud

我很犹豫,我还没有找到解决办法,所以我转向这里。 快速解释一下,假设我想按如下方式过滤查询:

SELECT name FROM students WHERE courseCode IN (17, 18, 19);
在这里,我将获得注册课程17或18或19的学生

现在,你如何让这三门课程的学生入学?也就是说,在171819中

当您知道“courseCode”值是什么时,它可能很简单,但是当您通过子查询获得这些值时,您将如何做到这一点

大概是这样的:

SELECT name FROM students WHERE courseCode = 17 and courseCode = 18 and courseCode = 19;
当我知道这些值时(这是不正确的)

但是,当我不知道它们是什么价值观时,我该怎么办?像这样:

SELECT name FROM students WHERE courseCode IN (SELECT courseCode FROM course WHERE ...);

我希望你已经很好地解释了我,谢谢你的帮助这里有一种可能的方法,与一组人一起崩溃,得到不同的coursecode的计数,并将其与文字进行比较:

 SELECT s.name
   FROM students s 
  WHERE s.courseCode IN (17,18,19)
  GROUP BY s.name
 HAVING COUNT(DISTINCT s.courseCode) = 3 
(17,18,19)
可以替换为子查询。但我倾向于使用内联视图和联接操作

 SELECT s.name
   FROM students s
   JOIN ( SELECT 17 AS courseCode
           UNION ALL SELECT 18
           UNION ALL SELECT 19
        ) c
     ON c.courseCode = s.courseCode
  GROUP BY s.name
 HAVING COUNT(DISTINCT s.courseCode) = 3
对内联视图
c
的查询只需要返回名为
courseCode
的列的不同值,并使用适当的数据类型。。。很多可能的查询都会起作用

   JOIN ( SELECT foo AS courseCode 
            FROM bar 
           WHERE ... 
           GROUP BY foo
        ) c

这是一种方法的示例,还有其他方法

这里有一种可能的方法,使用GROUP BY折叠并获得不同的coursecode计数,然后将其与文字进行比较:

 SELECT s.name
   FROM students s 
  WHERE s.courseCode IN (17,18,19)
  GROUP BY s.name
 HAVING COUNT(DISTINCT s.courseCode) = 3 
(17,18,19)
可以替换为子查询。但我倾向于使用内联视图和联接操作

 SELECT s.name
   FROM students s
   JOIN ( SELECT 17 AS courseCode
           UNION ALL SELECT 18
           UNION ALL SELECT 19
        ) c
     ON c.courseCode = s.courseCode
  GROUP BY s.name
 HAVING COUNT(DISTINCT s.courseCode) = 3
对内联视图
c
的查询只需要返回名为
courseCode
的列的不同值,并使用适当的数据类型。。。很多可能的查询都会起作用

   JOIN ( SELECT foo AS courseCode 
            FROM bar 
           WHERE ... 
           GROUP BY foo
        ) c

这是一种方法的示例,还有其他方法

我相信您可以在这里使用
ALL
条件。只需将中的
换掉,让它继续运行。我相信您可以在这里使用
ALL
条件。只需将
中的
换掉,让它继续运行。