跪求这种需求sql写法,试了好多次

A表:人员表 user_info
user_id
B表 :班次表 duty_info
user_id
duty_date

前天会传到后台几天日期 比如2017-4-8,2017-4-9
我要查询到所有人这几天的班次情况

我尝试下面的sql

 SELECT
    *
FROM
    uers_info U
LEFT JOIN duty_info D ON U . ID = D .user_id
WHERE
    (
        D .duty_date IN (
            '2017-04-03',
            '2017-04-04',
            '2017-04-05',
            '2017-04-06',
            '2017-04-07',
            '2017-04-08',
            '2017-04-09'
        )
        OR D .duty_date IS NULL
    )

如果所有人都没有排班 数据没问题 查询出所有人和全部都是空的排班
但是如果这个人 有排班但是不在我查询的日期内 查询出结果就会过滤掉这个人
有没有大神 帮帮忙

不在你日期当然没有啊。你的或语句判断是null。肯定不存在null的。

"但是如果这个人 有排班但是不在我查询的日期内",你是想滤掉,还是不想滤掉?
想滤掉,你的语句是符合预期的。