我有用户和事件表,
用户表:
+----+----------------+---------+
|编号 |名称 |文件|
+----±---------------±±----------+
| 1 |安德鲁 | 1 |
| 2 |瑞奇| 0 |
| 3 |乔| 0 |
| 4 |史蒂夫| 0 |
±----±-------------±±----------±
事件表:
+----+----------------+------------+--------+
|编号 |日期 | id用户|状态 |
+----±----------------±----------+--------+
| 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 按 RAND() LIMIT 1 排序
它没有给出任何结果。 如果我删除状态条件,它会与 Ricky 一起返回。 请帮助我如何解决此查询,以便结果仅返回 Joe 或 Steve。 非常感谢...
最佳答案
对于左联接,不能在 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
关于Mysql连接用户和事件表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24255944/