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 . . . 那就不要抱怨多余的行了。他们有你想要的信息。你是对的,在检查我的场景后,我发布了我误解了我的问题,这就是为什么我用错误的方式描述它。对于这种情况,你的答案是正确的。