我试图选择一个串联作为别名,然后在WHERE
子句中引用该别名,但无法使其工作。
select concat(area_code, "-", phone_triad, "-", phone_quad) as phone_number, first_name, last_name
from info_table
where phone_number in (<LIST OF NUMBERS>);
我试图选择一个串联作为别名,然后在WHERE
子句中引用该别名,但无法使其工作。
select concat(area_code, "-", phone_triad, "-", phone_quad) as phone_number, first_name, last_name
from info_table
where phone_number in (<LIST OF NUMBERS>);
1条答案
按热度按时间iibxawm41#
就像已经注解过的,不能在
WHERE
子句中引用 * output * 列名,只能引用 * input * 列名。必须重复该表达式。请参见:但还有更多。
字符串用单引号引起来:
'string'
。请参阅:如果你的表不是很小,你会希望提高索引的性能。你的 predicate 必须是"sargable"的。为此,你有两个基本的选择:
1.表达式索引
请注意表达式
area_code || '-' || phone_triad || '-' || phone_quad
而不是原始的concat()
表达式。为什么?请参阅:2.拆分输入
并对数字的一个或多个部分使用基本索引:
参见:
要保留结果中找不到的输入数字,请使用
LEFT JOIN
而不是JOIN
。然后,first_name
和last_name
会填入null
值-如果至少有一列定义为NOT NULL
,则null
值与实际列值是不同的。无论哪种方式,都必须正确处理
null
值、空字符串以及前导和尾随空格。