Mysql连接用户和事件表

标签 mysql events join

我有用户和事件表,

用户表:

+----+----------------+---------+ |编号 |名称 |文件| +----±---------------±±----------+ | 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

An SQLfiddle to test with .

关于Mysql连接用户和事件表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24255944/

相关文章:

MySQL:在带有 INNER JOIN 的 Where 子句中面临问题

mysql - 从 unix 时间戳 mysql 选择最近 7 天

vba - 以编程方式向项目添加事件处理程序

mysql - mysql中 'join'需要什么

mysql查询内部连接变慢

MySQL 5.6 默认存储引擎是 MyISAM 而不是 InnoDB

javascript - 更改匹配列表中项目的颜色

java - JMenuBar 未从 RSyntaxTextArea 接收按键组合

mysql - 如何自加入以及何时加入

MySQL:使用一个查找表查询具有不同查找ID的两个字段