Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将IN运算符与子查询一起使用_Mysql_Sql - Fatal编程技术网

Mysql 将IN运算符与子查询一起使用

Mysql 将IN运算符与子查询一起使用,mysql,sql,Mysql,Sql,有以下计划的 CREATE TABLE request ( `id` int, `classroom` varchar(255), `school` varchar(255), `date_of_application` datetime, `status` varchar(100), `user_id` bigint(20) NOT NULL ); CREATE TABLE user ( `id` int, `full_name` varchar(255) )

有以下计划的

CREATE TABLE request (
  `id` int,
  `classroom` varchar(255),
  `school` varchar(255),
  `date_of_application` datetime,
  `status` varchar(100),
  `user_id` bigint(20) NOT NULL
);

CREATE TABLE user (
  `id` int,
  `full_name` varchar(255)
);

CREATE TABLE user_schools (
  `user_id` int,
  `schools_string` varchar(255) 
);
我需要获取一个请求列表,其中status字段等于'pending',school字段位于与用户关联的学校列表中

现在我正在尝试以下查询

SELECT
  r.id,
  u.full_name,
  r.date_of_application,
  r.classroom
FROM
  request r
    inner join
  user u on u.id = r.user_id
WHERE
  r.school IN (
    SELECT
      us.schools_string
    FROM
      user_schools us
    WHERE
      us.user_id = u.id
  )
    AND  r.status = 'pending';
我目前得到了请求的总列表。我知道失败的是子查询

为方便您的合作,附上了一份

我期望的结果是有三个申请者:用户用户、用户用户用户和另一个助理用户 谢谢你的建议。如果有更好的解决办法,我感谢你


关于

代码正在按您的要求执行。如果需要列表中的用户/请求,则可以使用
选择distinct
,如下所示:

SELECT DISTINCT u.full_name, r.date_of_application
FROM request r inner join
     user u
     on u.id = r.user_id
WHERE r.school IN (SELECT us.schools_string
                   FROM user_schools us
                   WHERE us.user_id = u.id 
                  ) AND
      r.status = 'pending';

但是,如果您想要教室和请求id,那么您将获得原始结果集(或一些变体)。

为什么您希望有三行?一个用户“有”两个教室,每个教室都有一个单独的行。您必须使用
左连接
而不是
WHERE
语句。您能否演示如何在此逻辑中实现左连接这项工作,但是在这个场景中,我需要在期末考试中包括教室字段和id字段result@user615274 . . . 那就不要抱怨多余的行了。他们有你想要的信息。你是对的,在检查我的场景后,我发布了我误解了我的问题,这就是为什么我用错误的方式描述它。对于这种情况,你的答案是正确的。