假设我有这样的第一张表
分支表
|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
);
任何建议?
答案 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
将胜过正则表达式,但它是一种选择。
此外,如果您的字符串始终在结尾处,则可以使用right
或substr
来考虑加入:
select *
from balance ba
where exists (
select null
from branch br
where
right (br.name, length (ba.name)) = ba.name
)