mysql - 即使没有任何匹配项,JOIN 如何工作

标签 mysql sql join

我有这个问题:

UPDATE users u 
LEFT JOIN events e ON e.author_id = u.id
SET u.events = 0, e.seen = 1
WHERE  u.id = ?

即使此条件 ... ON e.author_id = u.id 不匹配任何行,我的查询也会更新 users 表。现在,当 users 表中没有任何匹配的行时,我还需要更新 events。我可以通过 RIGHT JOIN 来做到这一点。但我想知道我可以将 RIGHT JOINLEFT JOIN 混合在一起吗?

最佳答案

你不能在 MySQL 中这样做,因为 MySQL 不支持FULL OUTER JOIN

但为什么不只运行两个更新语句:

UPDATE users u 
    SET u.events = 0
    WHERE  u.id = ?;

UPDATE events e 
    e.seen = 1
    WHERE e.author_id = ?;

如果您认为事务语义很重要并且您的存储引擎支持事务,则可以将它们包装在一个事务中。

关于mysql - 即使没有任何匹配项,JOIN 如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39401369/

相关文章:

php - WordPress数据库错误: [Column 'date' cannot be null]

php - 有没有办法只能获取两个日期之间的数据集?

mysql - 如何修复 AFTER UPDATE 触发器

mysql - 求前两列的总和以及它们有多少分?

SQL 选择两个表中的行

mysql - 选择外键 MySQL

mysql - JOIN(表名)

database - PostgreSQL 将列名更改为另一个表列

mysql 使用文件排序而不是索引

c# - SQLite XML 子字符串