Mysql加入用户和事件表

时间:2014-06-17 04:51:34

标签: mysql events join

我有用户和evet表,

用户表:

+----+---------------+----------+ | id | name | document | +----±---------------±----------+ | 1 | Andrew | 1 | | 2 | Ricky | 0 | | 3 | Joe | 0 | | 4 | Steve | 0 | ±----±---------------±----------±

事件表:

+----+---------------+----------+--------+ | id | date | iduser | status | +----±---------------±----------+--------+ | 1 | 2014-06-17 | 2 | 0 | | 2 | 2014-06-20 | 1 | 0 | | 3 | 2014-07-05 | 3 | 0 | | 4 | 2014-07-11 | 1 | 0 | | 5 | 2014-06-30 | 2 | 1 | ±----±---------------±----------±--------+

用户可以创建事件并在该日期告知其状态0(关闭)或1(开启)。如果用户没有活动,他们的状态将被视为未关闭。 现在我想选择文件最少的随机用户,今天的状态不会关闭(2014-06-17)。

SELECT user.name FROM user LEFT OUTER JOIN event ON user.id = event.iduser WHERE user.document = ( SELECT MIN(user.document) FROM user) AND DATE(event.date) = DATE(NOW()) AND event.status !=0 ORDER by RAND() LIMIT 1

它没有结果。 如果我删除状态条件,它将返回Ricky。 请帮我解决这个问题,以便结果只返回Joe或Steve。 非常感谢......

1 个答案:

答案 0 :(得分:0)

对于左连接,WHERE子句中的右侧表(在本例中为event)不能有条件,否则它将变为内连接。您必须将event上的所有条件移动到ON子句中;

SELECT user.name 
FROM user 
LEFT OUTER JOIN event 
  ON user.id = event.iduser 
  AND DATE(event.date) = DATE(NOW()) 
  AND event.status = 0 
WHERE user.document = ( 
    SELECT MIN(user.document) 
    FROM user
  ) AND event.id IS NULL
ORDER by RAND() LIMIT 1

An SQLfiddle to test with