说,有两个表。一个包含具有长文本值的字段(例如foobarbaz
),另一个包含较短的值(foobar
和someothertext
)。我想从两个表中检索具有以下条件的值:文本不能相等,但长字符串的开头必须与短字符串匹配。在Postgres有这样一种(整洁的)方法吗?提前谢谢。
答案 0 :(得分:2)
怎么样:
SELECT <whatever>
FROM <your tables>
WHERE one_field <> the_other_field
AND position(the_other_field in one_field) = 1;
答案 1 :(得分:2)
正如另一个答案所说,“位置”可以使用......但我会使用正则表达式。
postgres=> create database test;
CREATE DATABASE
postgres=> \c test
You are now connected to database "test".
test=> create table long (long varchar);
CREATE TABLE
test=> create table short (short varchar);
CREATE TABLE
test=> insert into long values ('foobarbaz');
INSERT 0 1
test=> insert into long values ('qfoobarbaz');
INSERT 0 1
test=> insert into long values ('now this is a long text');
INSERT 0 1
test=> insert into short values ('foobar');
INSERT 0 1
test=> insert into short values ('someothertext');
INSERT 0 1
test=> select long.long from long join short on long.long <> short.short and long.long ~ ('^' || short.short);
long
-----------
foobarbaz
(1 row)
如果它包含正则表达式的东西,则可能需要对其进行转义。
(编辑后) - 这是使用LIKE(未测试)时的样子:
select long.long
from long
join short on
long.long <> short.short and
long.long LIKE (short.short || '%');