如何查询两个mysql表并拉出不在表和满足条件上的结果指定

时间:2012-06-12 14:40:02

标签: mysql select where

我有两张桌子

用户表

 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   | 

2 个答案:

答案 0 :(得分: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)

Its working, tested here


更新1

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

假设我想找出那些在06-13-12之前缺席或没有进入系统的人,假设时间表中有一个列名“日期” < / em>

使用以下查询

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)

Here is demo for new requirement


希望这是你想要的。

答案 1 :(得分: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;