MySQL "ON"条件 - 它是做什么的?

标签 mysql inner-join

首先让我解释一下,我已经搜索了至少一个小时以查找有关 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 中不存在,则不会返回一行。

仅供引用:连接语法是 http://dev.mysql.com/doc/refman/5.0/en/join.html

关于MySQL "ON"条件 - 它是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4720847/

相关文章:

php - 根据小于当前日期的列和空列选择数据

mysql - Where 子句似乎不起作用

python - 如何在pythonanywhere中使用flask连接数据库

php 如果元素的 strlen 大于,则将数组的每个元素插入到 mysql 中

sql - SQL 中有 2 个不明确的列名的查询错误

php - 使用内连接获取单个值

mysql - MySQL 中的 BLOB 类型

php - 初学者在表单处理方面遇到困难 - 无法将数据发布到 MySQL DB

sql-server - 如果查询中包含内联接,为什么左联接会变成内联接?

postgresql - 如何在 Postgresql 中水平组契约(Contract)一个表上的两个选择查询?