首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL转换id并在联接前添加where语句

问SQL转换id并在联接前添加where语句
EN

Stack Overflow用户
提问于 2017-07-06 19:28:24
回答 1查看 972关注 0票数 1

我对SQL非常陌生。我敢肯定,对你们中的许多人来说,这是一个简单的操作。我试图在同一台服务器上跨数据库连接两个表-- dbB和dbA,以及TableA (用IdA)和TableB (用IdB)。但在此之前,我希望将列IdA转换为一个数字,在该数字中,我希望从其值中删除“:XYZ”字符,并为dbA中的另一列添加where语句。下面我展示了联接的代码,但我不知道如何转换列的值。这允许我在联接中匹配idA和idB。提前一吨谢谢。

代码语言:javascript
复制
Select replace(idA, “:XYZ”, "")
from dbA.TableA guid
where event like “%2015”
left join dbB.TableB own
on guid.idA = own.idB
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-06 19:31:09

很少的事情

  1. Joins,其中(除非您使用子查询)语法顺序也是执行顺序(注意,select不是按操作顺序列出的,而是第一个语法!)
  2. 当涉及多个表时,别名/完全限定列,因此我们知道哪个字段来自哪个表。
  3. 操作顺序使SQL首先执行from和JOINS操作,因此在select中所做的操作对于编译器是不可用的(还没有作用域),这就是为什么不能在from、where甚至group by中使用select列别名的原因。
  4. 我不喜欢选择*通常,但我不知道你真正需要什么栏目.我在这里用过。
  5. 只要在加入之前的地方。大多数SQL编译器不再使用基于成本的优化,并根据数据表和不涉及的内容来确定最佳的执行计划。因此,只需将限制条件放在where中,在本例中,因为它限制了左侧联接的左表。如果需要限制左侧联接的右侧表中的数据,则应该将限制放在联接条件上,从而允许它在加入时进行筛选。
  6. 可能需要将IDA转换为整数(或与IDB相同的类型),我使用trim来消除空格,但是如果有其他非显示字符,则左联接匹配会出现问题)。

。

代码语言:javascript
复制
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在联接之前处于其转换状态(比如代数()的内容,然后从内到外处理)。

代码语言:javascript
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44957344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档