mysql中left join on后面and 和where条件查询的差异

第一个是先对join的表进行数据筛选(可替换为子查询)再关联前面的主表

第二个是先关联了再对两张表关联在一起的数据进行筛选

-- mysql中left join on后面and 和where条件查询的差异

-- 说下原因:
-- (1):ON后面的筛选条件主要是针对的是关联表【而对于主表筛选条件不适用】。
-- (2):对于主表的筛选条件应放在where后面,不应该放在ON后面
-- (3):对于关联表我们要区分对待。如果是要条件查询后才连接应该把查询件
-- 放置于ON后。如果是想再连接完毕后才筛选就应把条件放置于where后面
-- (4):对于关联表我们其实可以先做子查询再做join (这样就不用 on后接 and条件了)

-- left join on后面and
SELECT
	rsh.SiteName AS siteName,
	rsh.customerNum
FROM
	report_site_day rsh 
LEFT JOIN site_relation sr ON rsh.relationid = sr.ChildId AND sr.CustomerId='GOUWU'
WHERE
 rsh.modifytime >= '2017-11-15 00:00:00';
-- left join on后面and改造为子查询,再join
SELECT
	rsh.SiteName AS siteName,
	rsh.customerNum
FROM
	report_site_day rsh 
LEFT JOIN (SELECT ChildId  FROM site_relation WHERE CustomerId='GOUWU'
) sr ON rsh.relationid = sr.ChildId
WHERE
 rsh.modifytime >= '2017-11-15 00:00:00';

猜你喜欢

转载自blog.csdn.net/qq_29883183/article/details/81449978