gpt4 book ai didi

sql - 查询在加入之前应用 Where 子句?

转载 作者:行者123 更新时间:2023-11-29 14:10:40 24 4
gpt4 key购买 nike

老实说,我在这里真的很困惑,所以我会尽量保持简单。

我们有表 A:编号

表 B:编号 ||数

表 A 是 B 的“前置过滤器”,因为 B 包含很多不同的对象,包括 A。

所以我的查询,试图用过滤器得到所有的 A;

SELECT * FROM A a
JOIN B b ON b.id = a.id
WHERE CAST(SUBSTRING(b.number, 2, 30) AS integer) between 151843 and 151865

由于 A 的所有实例都以字母(“X******”)开头,我只想截断第一个字母,让过滤器使用用户指定的数字完成工作。

乍一看,应该是绝对没有后顾之忧的。但我好像错了。在我没想到的事情上...

我的 WHERE 子句似乎在我的 JOIN 之前执行了。因此,由于许多 B 的数字开头有多个字母,因此我发生了无效转换。尽管事实上如果我们留在 A 中它永远不会发生。

我一直以为 where 子句是在 join 之后执行的,但在这种情况下,postgres 似乎想证明我错了。

有什么解释吗?

SQLFiddle 演示问题:http://sqlfiddle.com/#!15/cd7e6e/7

即使使用 SubQuery,它仍然会出现相同的错误...

最佳答案

您可以使用正则表达式 substr 函数删除除数字以外的所有内容:CAST(substring(B.number from '\d') AS integer)

请参阅此处的工作示例:http://sqlfiddle.com/#!15/cd7e6e/18

关于sql - 查询在加入之前应用 Where 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35419351/

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