首先让我解释一下,我已经搜索了至少一个小时以查找有关 MySQL 中使用的这个关键字的任何信息。问题是我用来查找有关它的信息的任何搜索引擎都会在最琐碎和无关的结果中匹配单词“ON”。我也没有运气浏览 MySQL 的文档。
我看到 on 与 INNER JOIN 一起用作条件,但我不知道它的作用。一个用法的例子是
SELECT t1.name, t2.salary
FROM employee AS t1 INNER JOIN info AS t2 ON t1.name = t2.name;
我知道“WHERE”和“HAVING”的区别分别是过滤行和过滤组的区别。
不过,我无法想象什么是“ON”过滤器。
我认为在使用 INNER JOIN 时可能需要过滤,但我以前在 INNER JOIN 案例中使用过 WHERE,如下所示:
SELECT g.id, g.name, g.date_created, g.date_updated, g.created_by,
c.fullname AS creator_name, g.updated_by, u.fullname AS updater_name,
COUNT(i.id) as image_count
FROM gallery_groups g INNER JOIN
users c INNER JOIN
users u INNER JOIN
gallery_images i
WHERE g.created_by=c.id AND g.updated_by=u.id AND i.group=g.id
GROUP BY g.name
ORDER BY g.date_updated DESC, g.name
如有任何信息和/或示例,我们将不胜感激!
最佳答案
INNER JOIN
确实可以在没有 ON 的情况下编写,只需将所有 ON 子句移动到 where 子句即可。使用一个健全的优化器,它不会在性能方面产生影响(但它仍然会使查询更清晰!)。
由于空值处理,外部连接(例如,LEFT JOIN
)不能。
SELECT a.foo, b.bar FROM a LEFT JOIN b ON (a.fk = b.pk)
如果 a.fk 在 b 中不存在,将返回 b.bar=NULL。
SELECT a.foo, b.bar FROM a, b WHERE a.fk.b.pk
如果 a.fk 在 b 中不存在,则不会返回一行。
关于MySQL "ON"条件 - 它是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4720847/