在OData中查询多对多

时间:2013-12-31 17:00:03

标签: join odata

有一个我无法控制的数据库(因此不能简单地创建一个视图),它的表由OData公开。从逻辑上讲,表格看起来像。

create table one
(
  one_id int not null,
  constraint pk_one primary key (one_id)
)

create table two
(
  two_id int not null,
  one_id int not null,
  constraint pk_two primary key (two_id, one_id),
  foreign key (one_id) references one (one_id)
)

create table three
(
  three_id int not null,
  one_id int not null,
  name varchar(50),
  constraint pk_three primary key (three_id, one_id),
  foreign key (one_id) references one (one_id)
)

我的问题是如何编写一个OData网址,以便在给出 two.two_id 的值时,我可以从表格中检索所有与之关联的行表一个。在SQL中,这将是:

select three_id, name 
from one join two on one.one_id = two.one_id
    join three on one.one_id = three.one_id
where two.two_id = 2

我无法弄清楚如何在OData中的单个请求中进行导航。

1 个答案:

答案 0 :(得分:0)

从表一中,您可以扩展到表二和表三,过滤on_id并从三个中选择数据。

e.g。

  

/ one?$ expand = two,three& $ filter = two / two_id eq   2及$选择= 3 / three_id,三/名称