gpt4 book ai didi

mysql - SQL 转换 id 并在 join 之前添加 where 语句

转载 作者:行者123 更新时间:2023-11-29 04:35:09 25 4
gpt4 key购买 nike

我是 SQL 的新手。这是一个我相信对你们很多人来说很简单的操作。我正在尝试在同一台服务器上跨数据库连接两个表——分别是 dbB 和 dbA,以及 TableA(使用 IdA)和 TableB(使用 IDB)。但在此之前,我想将 IdA 列转换为一个数字,我想从其值中删除“:XYZ”字符,并为 dbA 中的另一列添加一个 where 语句。下面我展示了我的连接代码,但我不确定如何转换列的值。这允许我在连接中将 idAidB 匹配。提前致谢。

Select replace(idA, “:XYZ”, "")
from dbA.TableA guid
where event like “%2015”
left join dbB.TableB own
on guid.idA = own.idB

最佳答案

一些事情

  1. FROM、Joins、WHERE(除非您使用子查询)语法顺序也是执行顺序(注意 select 未列在操作顺序的末尾,而是在语法上排在首位!)
  2. 当涉及多个表时,别名/完全限定列,以便我们知道哪个字段来自哪个表。
  3. 操作顺序让 SQL 执行 from 和 JOINS 1st 因此您在 select 中执行的操作对于编译器不可用(尚不在范围内),这就是为什么您不能在 from 中使用选择列别名的原因, where 甚至 group by 也是如此。
  4. 我通常不喜欢 Select *,但因为我不知道您真正需要什么列...我在这里使用了它。
  5. 就加入之前的位置而言。大多数 SQL 编译器不再使用基于成本的优化,并根据您的数据表和不涉及的内容找出最佳执行计划。因此,在这种情况下,只需将限制条件放在 where 中,因为它限制了左连接的左表。如果您需要限制左连接右表中的数据,您可以在连接条件上设置限制;从而允许它在加入时进行过滤。
  6. 可能需要将 IDA 转换为整数(或转换为与 IDB 相同的类型)我使用 trim 来消除空格,但如果有其他非显示字符,则左连接匹配会出现问题)

.

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

关于mysql - SQL 转换 id 并在 join 之前添加 where 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44957344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com