1

我想从 2 个表中选择,其中 2nd id 与第一个 id 中的前 4 个字符相等

SELECT a.*, b.*, substring(a.my_id from 1 for 4)::integer as number
   FROM table1 as a
INNER Join table2 as b ON(b.id_2=number) where my_id = 101
                                 ^
It produces an error here        | 

错误:列“编号”不存在

SQL 状态:42703

人物:189

4

1 回答 1

3

你不能使用这样的别名,你需要一个派生表:

select *
from (
   SELECT t1.*, 
          substring(t1.my_id::text from 1 for 4)::integer as number
   FROM table1 t1
) as a 
inner join table2 as b ON (b.id_2 = a.number) 
where my_id = 101

将用作外键的数字作为 varchar 列的一部分存储是一个非常非常丑陋的设计。该数字应该是表 1 中自己的一列。

于 2012-07-25T10:37:11.020 回答