我有用户和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。 非常感谢......
答案 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