sql—如果一个表的值与第二个表的值匹配,则从该表中提取值

4ktjp1zp  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(679)

背景:
在cosmosdb数据库中有两个表key:value documents 在他们的容器里。t1和t2

T1

Id: 111
ems_featurecategory: 1234
ems_name: "win"

T2

feature_category: "win"
feature_category: "hello"

我希望查询cosmosdb以便:
如果t1的ems\u name值与t2的feature\u category值匹配,则返回t1的ems\u featurecategory键的值。
期望输出:
因此,由于t1的ems\u name键的值与t2的featurecategory键的值匹配

ems_name: "win"
featurecategory: "win",

将返回的值为:1234
我的方法:
连接两个表并执行如下查询:

SELECT c.emsfeaturecategory, c.ems_name, f.feature_category
 FROM c 
 JOIN f in c.id
 WHERE array_contains(['',''],c.id,true)
 AND c.ems_name = featurecategory...

我不知道如何成功地写出这个查询。任何建议都是有用的。

dzhpxtsq

dzhpxtsq1#

在cosmosdb中,无法进行跨容器搜索。我建议您更改文档的架构,如下所示:

T1

{
    "id": "111",
    "ems_featurecategory": 1234,
    "ems_name": "win",
    "feature_category": [
        "win",
        "hello"
    ]
}

然后,您可以使用以下sql:

SELECT value c.ems_featurecategory     
 FROM c 
 where array_contains(c.feature_category,c.ems_name,true)

下面是我的测试结果:

tquggr8v

tquggr8v2#

就这么做吧:

select c.emsfeaturecategory, c.ems_name, f.feature_category
from table1 c
join table2 f on c.ems_name = f.featurecategory

使用您的示例,它将返回以下内容:

emsfeaturecategory | ems_name | feature_category
1234               | win      | hello

我正在使用你指定的列。后来你说你只想输出1234。那么你只需要做:

select c.emsfeaturecategory
from table1 c
join table2 f on c.ems_name = f.featurecategory

注意:join在功能上与“inner join”相同
你可以在这里阅读更多关于连接的信息

相关问题