Sql 如何连接记录中子字符串上的表?
我有一个将名称与帐户ID关联的表,如下所示Sql 如何连接记录中子字符串上的表?,sql,database,postgresql,amazon-redshift,Sql,Database,Postgresql,Amazon Redshift,我有一个将名称与帐户ID关联的表,如下所示 **Accounts** name account_id 另一个类似的表将信息与帐户uri相关联 **Info** information account_uri 帐户uri如下所示:/some/random/path/123456/random数字 其中,123456是与用户关联的账户id 我如何连接这些表,并得到如下结果 **results** name information 这是一个亚马逊红移/postgresql数据库。谢谢你的建议 虽
**Accounts**
name
account_id
另一个类似的表将信息与帐户uri相关联
**Info**
information
account_uri
帐户uri如下所示:/some/random/path/123456/random数字
其中,123456是与用户关联的账户id
我如何连接这些表,并得到如下结果
**results**
name
information
这是一个亚马逊红移/postgresql数据库。谢谢你的建议 虽然效率不高,但您可以:
select a.name, i.information
from accounts a join
info i
on i.account_uri like '%/' || a.account_id;
不幸的是,使用这种数据结构很难利用索引。这样做效率不高,但您可以:
select a.name, i.information
from accounts a join
info i
on i.account_uri like '%/' || a.account_id;
不幸的是,使用这种数据结构很难利用索引。这样做效率不高,但您可以:
select a.name, i.information
from accounts a join
info i
on i.account_uri like '%/' || a.account_id;
不幸的是,使用这种数据结构很难利用索引。这样做效率不高,但您可以:
select a.name, i.information
from accounts a join
info i
on i.account_uri like '%/' || a.account_id;
不幸的是,使用这种数据结构很难利用索引。如果您不能将
帐户id
放在Info表中,这将起作用:
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))))
反向(…)用于创建LastIndexOf函数
可能只想做:
SELECT REVERSE(SUBSTRING(REVERSE([account_uri]),0,CHARINDEX('/',REVERSE(account_uri))))
FROM Information
查看子字符串/反向是否获取整个帐户id
这应该找到“/”之间的第二个字符串
SUBSTRING(REVERSE(SUBSTRING(REVERSE([account_uri]),CHARINDEX('/',REVERSE(account_uri)))),0,CHARINDEX('/',REVERSE(SUBSTRING(REVERSE([account_uri]),CHARINDEX('/',REVERSE(account_uri)))))
如果您无法将
帐户\u 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))))
反向(…)用于创建LastIndexOf函数
可能只想做:
SELECT REVERSE(SUBSTRING(REVERSE([account_uri]),0,CHARINDEX('/',REVERSE(account_uri))))
FROM Information
查看子字符串/反向是否获取整个帐户id
这应该找到“/”之间的第二个字符串
SUBSTRING(REVERSE(SUBSTRING(REVERSE([account_uri]),CHARINDEX('/',REVERSE(account_uri)))),0,CHARINDEX('/',REVERSE(SUBSTRING(REVERSE([account_uri]),CHARINDEX('/',REVERSE(account_uri)))))
如果您无法将
帐户\u 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))))
反向(…)用于创建LastIndexOf函数
可能只想做:
SELECT REVERSE(SUBSTRING(REVERSE([account_uri]),0,CHARINDEX('/',REVERSE(account_uri))))
FROM Information
查看子字符串/反向是否获取整个帐户id
这应该找到“/”之间的第二个字符串
SUBSTRING(REVERSE(SUBSTRING(REVERSE([account_uri]),CHARINDEX('/',REVERSE(account_uri)))),0,CHARINDEX('/',REVERSE(SUBSTRING(REVERSE([account_uri]),CHARINDEX('/',REVERSE(account_uri)))))
如果您无法将
帐户\u 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))))
反向(…)用于创建LastIndexOf函数
可能只想做:
SELECT REVERSE(SUBSTRING(REVERSE([account_uri]),0,CHARINDEX('/',REVERSE(account_uri))))
FROM Information
查看子字符串/反向是否获取整个帐户id
这应该找到“/”之间的第二个字符串
SUBSTRING(REVERSE(SUBSTRING(REVERSE([account_uri]),CHARINDEX('/',REVERSE(account_uri)))),0,CHARINDEX('/',REVERSE(SUBSTRING(REVERSE([account_uri]),CHARINDEX('/',REVERSE(account_uri)))))
另一个解决方案
SELECT a.name, i.information
FROM accounts AS a
INNER JOIN info AS i ON SUBSTRING_INDEX(i.account_url, '/', -1) = a.account_id
旁注:这根本不是一个合适的结构;)我不确定这是否适用于PostgreSQL,因为子字符串的索引函数。我真的没有注意到这与PostgreSQL有关 另一个解决方案
SELECT a.name, i.information
FROM accounts AS a
INNER JOIN info AS i ON SUBSTRING_INDEX(i.account_url, '/', -1) = a.account_id
旁注:这根本不是一个合适的结构;)我不确定这是否适用于PostgreSQL,因为子字符串的索引函数。我真的没有注意到这与PostgreSQL有关 另一个解决方案
SELECT a.name, i.information
FROM accounts AS a
INNER JOIN info AS i ON SUBSTRING_INDEX(i.account_url, '/', -1) = a.account_id
旁注:这根本不是一个合适的结构;)我不确定这是否适用于PostgreSQL,因为子字符串的索引函数。我真的没有注意到这与PostgreSQL有关 另一个解决方案
SELECT a.name, i.information
FROM accounts AS a
INNER JOIN info AS i ON SUBSTRING_INDEX(i.account_url, '/', -1) = a.account_id
旁注:这根本不是一个合适的结构;)我不确定这是否适用于PostgreSQL,因为子字符串的索引函数。我真的没有注意到这与PostgreSQL有关 你所有的ID都是6位数吗?在5到7之间的任意位置digits@johncorser我相信Mihai想说的是如果ID和uri匹配是的,帐户\u id与帐户\u uri中的所有id的uri号匹配6位数字?介于5和7之间的任意位置digits@johncorser我相信Mihai想说的是如果ID和uri匹配是的,帐户\u id与帐户\u uri中的所有id的uri号匹配6位数字?介于5和7之间的任意位置digits@johncorser我相信Mihai想说的是如果ID和uri匹配是的,帐户\u id与帐户\u uri中的所有id的uri号匹配6位数字?介于5和7之间的任意位置digits@johncorser我相信Mihai想要了解的是,如果ID与uri号码匹配,那么帐户ID与uri号码匹配!现在我得到一个空集。这可能与表格本身有关,因此我将尝试解决这一问题,并在我确定其有效后立即将其标记为已接受。好的,我将在信息表格上选择(添加)反向,以确保结果得到正确的值啊,问题是帐户uri的格式实际上是/path/to/123456/randomNumbers,其中123456是帐户uri。我将修改这个问题。你知道怎么加入吗?如果它合并了数据,丑八怪就可以了!谢谢你的帮助。如果我弄明白了,我会在这里发布。谢谢!现在我得到一个空集。这可能与表格本身有关,因此我将尝试解决这一问题,并在我确定其有效后立即将其标记为已接受。好的,我将在信息表格上选择(添加)反向,以确保结果得到正确的值啊,问题是帐户uri的格式实际上是/path/to/123456/randomNumbers,其中123456是帐户uri。我将修改这个问题。你知道怎么加入吗?如果它合并了数据,丑八怪就可以了!谢谢你的帮助。如果我弄明白了,我会在这里发布。谢谢!现在我得到一个空集。这可能与表格本身有关,因此我将尝试解决这一问题,并在我确定其有效后立即将其标记为已接受。好的,我将在信息表格上选择(添加)反向,以确保结果得到正确的值啊,问题是帐户uri的格式实际上是/path/to/123456/randomNumbers,其中123456是帐户uri。我将修改这个问题。你知道怎么加入吗?如果它合并了数据,丑八怪就可以了!谢谢你的帮助。如果我弄明白了,我会的