4

我有两张桌子

用户表

 user_id | name  |
    1    | peter |
    2    | kofi  |
    3    | sam   |
    4    | nasah |
    5    | sarah |
    6    | david |
    7    | dan   |

时间表

 time_id | user_id | register
    1    |     1   |  present
    2    |     2   |  absent
    3    |     3   |  absent
    4    |     4   |  present
    5    |     5   |  absent

在“注册”栏下的“时间”表中,用户可以在登录系统时注册“出席”或“不在”。

我想要一个 mysql 查询来选择注册“缺席”或根本没有注册的用户。

返回结果应该是

kofi  | absent
sam   | absent
sarah | absent
david | 
dan   | 
4

2 回答 2

3

那这个呢

SELECT t2.name, t1.register 
FROM time t1
RIGHT JOIN user t2
ON t2.user_id=t1.user_id
WHERE (t1.register = 'absent' OR t1.register is null)

它的工作,在这里测试


更新 1

根据您的对话,您希望根据时间/日期进一步过滤

假设我想找出那些在 2012 年 6 月 13 日之前缺席或没有进入系统的人,假设时间表中有一个列名“日期”

使用以下查询

SELECT t2.name, t1.register, t1.mydate 
FROM time t1
RIGHT JOIN user t2
ON t2.user_id=t1.user_id
WHERE 
     (t1.register = 'absent' OR t1.register is null)
     AND
     (t1.mydate <= '2012-06-13' OR t1.mydate is null)

这是新要求的演示


希望这是你想要的。

于 2012-06-12T15:13:54.333 回答
0

使用此查询:

SELECT t1.name,t2.register from user t1 
left join time t2 on t1.user_id=t2.user_id
where t2.register='absent' or t2.register IS NULL;
于 2012-06-12T15:41:47.143 回答