有以下方案
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)
);
我需要获取状态字段等于“等待”的请求列表。学校领域位于与用户相关的学校名单中
现在我正在尝试以下查询
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';
我目前获得了总请求列表。我明白失败的是子查询。
附上sqlfiddle以促进您的协作
我期望的结果是申请人的三个应用程序:用户用户,用户用户和另一个助理用户 谢谢你的想法。如果有更好的解决方案,我感谢你。
此致
答案 0 :(得分:1)
代码正在按照你的要求行事。如果您需要列表中的用户/请求,则可以使用select 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,那么您将获得原始结果集(或某些变体)。