SQL Server SQL服务器:外键选择,返回取子表为对象

0pizxfdo  于 2023-01-25  发布在  其他
关注(0)|答案(1)|浏览(152)

我通常使用Firestore,所以我对SQL Server相当陌生。
我试图用一个简单的例子来实现多对多的关系。
这是我的方法-表:

create table tbl_forms
(
    id INT NOT NULL IDENTITY(1, 1),
    title nvarchar(255), 
    description text,
    primary key(id)
)

create table tbl_tags
(
    id INT NOT NULL IDENTITY(1, 1),
    tag nvarchar(255), 
    color nvarchar(7),
    primary key(id)
)

我正在尝试使用以下内容进行选择:

from tbl_forms           from tbl_tags
______________________   ______________
id, title, description,  { tag, color }

有没有办法把第二个表(在本例中是tags)作为对象呢?因此,如果有多个结果,我会得到一个如下所示的对象:

[{ 'tag1', 'red' }, {'tag_no_2', '#abcabc' }]

我尝试使用包含两个ID的帮助表,但不确定如何获得所需的结果

create table x_form_tags
(
    id_forms int FOREIGN KEY REFERENCES tbl_forms(id),
    id_tags int FOREIGN KEY REFERENCES tbl_tags(id)
)
au9on6nz

au9on6nz1#

可以在APPLY中使用FOR JSON PATH操作符,为tbl_forms的每一行创建一个JSON数组。

SELECT
  f.id,
  f.title,
  f.description,
  j.tags
FROM tbl_forms f
CROSS APPLY (
    SELECT
      t.tag,
      t.color
    FROM x_form_tags ft
    JOIN tbl_tags t ON t.id = ft.id_tags
    WHERE ft.id_forms = f.id   -- correlation condition
    FOR JSON PATH
) j(tags);

相关问题