当前位置: 首页 > 面试题库 >

多对多关系过滤器

令狐运珧
2023-03-14
问题内容

我需要使用类别表过滤查询,该类别表与另一个表具有many2many关系。是否可以过滤与many2many关系的查询?

res_partner具有category_id与表相关的many2many字段res_partner_category.res_partner,或者说伙伴可以具有许多类别。我需要的是过滤res_partners具有类别“业务”或“零售”的表。如果没有任何这些类别,则不应显示。

此外还有另外一个领域res_partnercategory_value_ids,有one2many关系有res_partners_category_value

res_partner 具有以下关系的字段:

  • category_idres_partner_category(many2many)
  • category_value_idsres_partner_category_value(one2many)
  • name (字符)

res_partner_category 具有以下关系的字段:

  • partner_idsres_partner(many2many)
  • name (字符)

res_partner_category_value 具有以下关系的字段:

  • category_group_idres_partner_category(many2one)
  • category_idres_partner_category(many2one)
  • object_idres_partner(many2one)

但是,如果我尝试res_partner_category_value在SQL查询中使用表,则会收到无法在查询中使用它的错误。

因此,例如,如果有4个合作伙伴具有以下类别:

  • 第一:categ1,categ2,商业
  • 第二:零售
  • 第三:零售,商业
  • 第四位:categ1,categ2

该查询应返回第一,第二和第三伙伴。
有人告诉我,无法通过many2many关系进行这种过滤。所以我想知道这真的不可能还是很复杂吗?

编辑:
我发现了另一个名为的表res_partner_category_rel。我没有看到它,因为在Openerp管理界面中(可以看到数据库的所有对象),该表未显示。您只能直接通过数据库查看它。因此,我对这个“缺失”表感到困惑:

res_partner_category_rel:

  • partner_id (很多)
  • category_id (很多)

问题答案:

这是 应该提供的html" target="_blank">测试用例:

CREATE TABLE partner (
  partner_id serial PRIMARY KEY
, partner    text
);
INSERT INTO partner (partner) VALUES 
  ('partner1')
, ('partner2')
, ('partner3')
, ('partner4')
;    
CREATE TABLE category (
  category_id serial PRIMARY KEY
, category    text
);
INSERT INTO category (category) VALUES 
  ('categ1')
 ,('categ2')
 ,('business')
 ,('retail');

CREATE TABLE partner_category (
  partner_id  int REFERENCES partner(partner_id)
, category_id int REFERENCES category(category_id)
, CONSTRAINT cat_pk PRIMARY KEY (partner_id, category_id)
);
INSERT INTO partner_category (partner_id, category_id) VALUES 
   (1,1), (1,2), (1,3)
  ,(2,4)
  ,(3,3), (3,4)
  ,(4,1), (4,2);

这是您要 查询的查询许多 可能的变体之一):

SELECT p.*
FROM   partner p
WHERE  EXISTS (SELECT * FROM partner_category pc
               WHERE  pc.partner_id = p.partner_id AND pc.category_id = 3)
OR     EXISTS (SELECT * FROM partner_category pc
               WHERE  pc.partner_id = p.partner_id AND pc.category_id = 4)
ORDER  BY p.partner_id;

SQL提琴。

这里的关键词是 关系划分 。我们在这个相关问题下集合了一个完整的查询库来处理此类问题:

  • 如何筛选具有多次通过关系的SQL结果


 类似资料:
  • 问题内容: 伙计们,我正在努力为我的公司制作一个简单的票证生成系统,以吸引人。目前,我的MSSQL数据库中有一个名为的表,另一个名为的表。 我的应用程序是C#Windows窗体,因此在新的票证生成窗体上,我有许多文本框和一个用于分配工程师的comboBox,由填充。生成票证后,以这种形式输入的所有信息都将与from一起存储。 效果很好,但是后来我的客户要求我添加选项,以便可以在一张票上分配3名工程

  • 问题内容: 我目前正在使用ActiveAndroid,并且在过去的几个小时里一直在尝试建立多对多关系,但是我还是无法正常工作。我希望你能帮助我: 我有“学生”和“课程”的模型,一个学生可以有很多课程,而一个课程有很多学生。基本上,这就是我在“ StudentCourse”模型中所拥有的: 现在,我要做的是使用以下代码获取“课程X中的所有学生”: 但是我收到以下错误: java.lang.Class

  • 在本章中,让我们了解和学习多对多的关系。要表示多对多关系,必须创建第三个表(通常称为联接表),将多对多关系分解为两个一对多关系。 为此,我们还需要添加一个联接表。 下面先添加一个表。表的定义如下所示 - 现在创建一个多对多的关系。假设有多个作者在多个项目上工作,反之亦然。 如您所知,我们在中有一个字段,所以为它创建了一个表。但现在不再需要这个字段了。 选择字段,然后按下删除 按钮,将看到以下消息。

  • 我还想知道如何定义每个模型上的关系--你是否需要或者是否可以只在用户上定义关系?

  • 问题内容: 考虑以下Hibernate映射文件: 当我运行以下命令时: 生成的SQL在中间映射表(contentAudVidLinks)上具有WHERE子句,而不是在“ Clips”表上,即使我已将filter属性添加到Clip Bags中。 我究竟做错了什么? 问题答案: 弄清楚了。对于任何有兴趣的人,我的属性在错误的位置: 之前: 后: