我有一个表格,将姓名与帐户ID相关联,就像这样
**Accounts**
name
account_id
和另一个这样的表将信息与帐户uri的
相关联**Info**
information
account_uri
帐号uri看起来像这样:/ some / random / path / 123456 / randomDigits
其中123456是与用户关联的accound_id。
我如何加入这些表格,并得到像
这样的结果**results**
name
information
这是一个亚马逊redshift / postgresql数据库。谢谢你的建议!
答案 0 :(得分:1)
效率不高,但你可以这样做:
select a.name, i.information
from accounts a join
info i
on i.account_uri like '%/' || a.account_id;
不幸的是,使用这种数据结构很难利用索引。
答案 1 :(得分:1)
如果您无法将account_id
放入信息表中,这将有效:
SELECT A.Name,
I.Information
FROM Information I
JOIN Account A
ON A.account_id = REVERSE(SUBSTRING(REVERSE([account_uri]),0,CHARINDEX('/',REVERSE(account_uri))))
REVERSE(...)
用于创建LastIndexOf函数。
可能只想做:
SELECT REVERSE(SUBSTRING(REVERSE([account_uri]),0,CHARINDEX('/',REVERSE(account_uri))))
FROM Information
查看SUBSTRING / REVERSE是否获得整个帐户ID
这应该找到'/'
之间的第二个字符串SUBSTRING(REVERSE(SUBSTRING(REVERSE([account_uri]),CHARINDEX('/',REVERSE(account_uri)))),0,CHARINDEX('/',REVERSE(SUBSTRING(REVERSE([account_uri]),CHARINDEX('/',REVERSE(account_uri)))))
答案 2 :(得分:1)
另一种解决方案
SELECT a.name, i.information
FROM accounts AS a
INNER JOIN info AS i ON SUBSTRING_INDEX(i.account_url, '/', -1) = a.account_id
附注:这根本不是一个合适的结构;)由于SUBSTRING_INDEX函数,我不确定它是否适用于PostgreSQL。我真的没有注意到这与PostgreSQL有关。