事情很少
- FROM,加入,其中(除非您使用子查询)语法为了它也是执行的顺序(注意选择没有在操作的顺序列出其接近尾声但首先在语法上!)
- 当涉及多个表时,别名/完全限定列,因此我们知道哪个字段来自哪个表。
- 操作顺序让SQL执行from和JOINS 1st,因此您在select中做的操作对于编译器来说是不可用的(不在范围内),这就是为什么您不能使用select中的select列别名,哪里甚至是哪一组。
- 我不喜欢Select *通常,但因为我不知道你真的需要什么列......我在这里使用它。
- 就在加入之前。大多数SQL编译器都使用基于成本的优化,并根据数据表找出最佳执行计划以及不涉及的内容。所以只需将限制条件放在这种情况下,因为它限制了左连接的左表。如果您需要限制左连接右表上的数据,则您将限制连接条件;从而允许它在加入时进行过滤。
- 可能需要转换为IDA整数(或同一类型IDB)我用微调,以消除空间,但如果有其他非显示字符,你必须用左手问题加入匹配)
。
SELECT guild.*, own.*
FROM dbA.TableA guid
LEFT JOIN dbB.TableB own
on cast(trim(replace(guid.idA, ':XYZ', '')) as int) = own.idB
WHERE guid.event like '%2015'
,或者使用子查询,以便IDA在转化的状态在连接前先兑现改造(比如代数()的问题,并从里面得到处理)
SELECT *
FROM (SELECT cast(trim(replace(guid.idA, ':XYZ', '')) as int) as idA
FROM dbA.TableA guid
WHERE guid.event like '%2015') B
LEFT JOIN dbB.TableB own
on B.IDA = own.idB
你会更换连接或必须使用子查询,以便在连接之前存在替换的值。 – xQbert