使用类似的PostgreSQL子查询

时间:2018-01-12 11:25:29

标签: sql database postgresql select

假设我有这样的第一张表

分支表

|name     |description|
|123456ABC|FOO        |
|553646DEF|FO2        |

和第二个表格

余额表

|name|description|
|ABC |oof        |
|DEF |2of        |

我想查询Balance表,其中每行包含Branch表中的名称.. 例如" 123456ABC"在分支表中,我想得到" ABC"平衡表中的行

我怎么能实现这一目标?到目前为止我还没试过这个问题

select * from Balance
where name like (
        SELECT `name` FROM Branch
);

任何建议?

2 个答案:

答案 0 :(得分:2)

您应将<{1}}的名称转换为balance个模式:

LIKE

联接可能看起来更具可读性:

SELECT * FROM Balance
WHERE (
    SELECT `name` FROM Branch
) LIKE '%' || name;

答案 1 :(得分:0)

我不知道你是否会有欺骗,所以你可能想考虑使用半连接。对于大型数据集,半连接通常比列表内查询更有效。

@clemens解决方案看起来很好,假设没有欺骗。或者,您可以使用正则表达式:

select *
from balance ba
where exists (
  select null
  from branch br
  where
    br.name ~ ba.name
)

在性能方面,我认为like将胜过正则表达式,但它是一种选择。

此外,如果您的字符串始终在结尾处,则可以使用rightsubstr来考虑加入:

select *
from balance ba
where exists (
  select null
  from branch br
  where
    right (br.name, length (ba.name)) = ba.name
)