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

时间:2016-09-08 22:58:27

标签: 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 = ?

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

1 个答案:

答案 0 :(得分:3)

你不能在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 = ?;

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