和join的条件类似于join之后的条件

时间:2017-07-07 11:43:05

标签: mysql join where

是否与加入的条件和条件以及加入后的条件相似?

例如

对于以下两个查询,它会给我相同的结果

1) SELECT COUNT(*)
FROM language_message_mapping lm
 LEFT JOIN user_profiles up ON lm.user_profile_id_fk=user_profile_id_pk 
  AND lm.user_profile_id_fk IS NOT NULL

2) SELECT COUNT(*)
FROM language_message_mapping lm
LEFT JOIN user_profiles up ON lm.user_profile_id_fk=user_profile_id_pk 
where lm.user_profile_id_fk IS NOT NULL

我想更新从上面的查询获得的行 请告诉我下面更新查询是否正确

UPDATE language_message_mapping lm 
LEFT JOIN user_profiles up ON lm.user_profile_id_fk=user_profile_id_pk 
SET lm.user_account_id_fk=up.user_account_id_fk
AND lm.user_profile_id_fk IS NOT NULL;

3 个答案:

答案 0 :(得分:1)

不,这与left join不一样(虽然inner join也是如此)。

第一个查询从第一个表中获取所有记录,并根据JOIN ON子句中的条件添加第二个表中的数据。

第二个查询获得第一个表的并非所有记录 - 只有与where子句匹配的数据。

答案 1 :(得分:0)

第一个查询将在两个表的连接操作中应用lm.user_profile_id_fk IS NOT NULL语句,因此它将排除lm.user_profile_id_fk IS NOT NULL的行。

第二个查询将执行连接,一旦对所有行应用了连接,将提取lm.user_profile_id_fk IS NOT NULL

关于性能,它取决于表大小,索引等。

答案 2 :(得分:0)

不,他们完全不一样。您的第一个查询将产生OUTER JOIN的正确效果,而第二个查询最终将与INNER JOIN相同

对于INNER JOIN,这不会产生任何影响