多对多关系过滤器

2024-01-12

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

Table res_partner有many2many字段category_id与表有关的res_partner_category.res_partner,或者我们可以说合作伙伴可以有很多类别。我需要的是过滤res_partners表,其中类别名为“商业”或“零售”。如果它不具有任何这些类别,则不应显示。

还有另一个字段res_partner这是category_value_ids并且有one2many与 的关系res_partners_category_value:

res_partner具有以下关系字段:

  • category_id to res_partner_category(很多2很多)
  • category_value_ids to res_partner_category_value(一二多)
  • name (char)

res_partner_category具有以下关系字段:

  • partner_ids to res_partner(很多2很多)
  • name (char)

res_partner_category_value具有以下关系字段:

  • category_group_id to res_partner_category(多2一个)
  • category_id to res_partner_category(多2一个)
  • object_id tores_partner(多2一个)

但如果我尝试使用res_partner_category_valueSQL 查询中的表我收到错误,无法在查询中使用它。

例如,如果有 4 个合作伙伴属于以下类别:

  • 第一:类别 1、类别 2、商业
  • 第二:零售
  • 第三:零售、商业
  • 第四:类别1、类别2

查询应返回第一、第二和第三合作伙伴。
一个人告诉我,不可能用多对多关系进行这样的过滤。所以我想知道这真的不可能还是很复杂?

EDIT:
我又发现了一张桌子叫res_partner_category_rel。我没有看到它,因为在Openerp管理界面中,你可以看到数据库的所有对象,但没有显示该表。只能通过数据库直接看到。 所以我对这个“缺失”的表感到困惑:

res_partner_category_rel:

  • partner_id(多2一个)
  • category_id(多2一个)

Setup

这是您应该提供的测试用例:

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);

Solution

One way:

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;

Another:

SELECT p.*
FROM        (SELECT partner_id FROM partner_category WHERE category_id = 3) pc1
FULL   JOIN (SELECT partner_id FROM partner_category WHERE category_id = 4) pc2 USING (partner_id)
JOIN   partner p USING (partner_id)
ORDER  BY p.partner_id;

fiddle https://dbfiddle.uk/q1MO2O23
Old sqlfiddle http://sqlfiddle.com/#!17/2870a/1

第二个假设是唯一的(partner_id, category_id) in partner_category.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多对多关系过滤器 的相关文章

  • 如何处理多个连接

    我有一个复杂的查询 需要总共 4 个表中的字段 内部联接导致查询花费的时间比应有的时间长得多 我已经运行了一个 EXPLAIN 语句 其可视化结果附在下面 这是我的查询 SELECT pending corrections correcte
  • 如何选择从数据集中进入数据表的列?

    作为数据工作的新手 我希望我能正确地提出这个问题 如何选择从数据集中进入数据表的列 我知道我可以使用 填充数据表 DataTable table dataSet1 Tables 0 但这会引入所有列 如何仅使用某些列填充数据表 我正在使用
  • Postgres LEFT JOIN 与 WHERE 条件

    我需要使用 where 条件左连接两个表 Table time table id rid start date end date 1 2 2017 07 01 00 00 00 2018 11 01 00 00 00 2 5 2017 01
  • 查询以查找平均加权价格

    我在 Oracle 中有一个表 每个给定部分包含多行 每行都有一个与其关联的数量和价格 还有一个给定零件的行集相加的总数量 以下是数据示例 我需要的是获得该零件的平均加权价格 例如 如果数量为 100 的零件的价格为 1 数量为 50 的零
  • MySQL 中的 INSERT 和 UPDATE 有什么区别?

    它似乎INSERT and UPDATE对我做同样的事情 有什么场合我应该使用INSERT代替UPDATE反之亦然 In 增删改查操作 http en wikipedia org wiki Create read update and de
  • 使用包含 [模板]、[编码]、[所有者] 的批处理文件和 .sql 文件创建 Postgres 数据库

    我想使用批处理文件创建 Postgres 数据库 现在执行此操作的正常方法如下 C Program Files PostgreSQL 9 0 bin createdb exe U Myadmin MydatAbseName 上面的脚本使用默
  • 当有“拥有”时,为什么你有“哪里”[重复]

    这个问题在这里已经有答案了 我知道这个问题已经被讨论了很多 但我的研究都无法让我相信 where and havingMySQL 中的 子句 据我了解 我们可以使用 where 子句实现所有可以完成的操作having 例如 select f
  • MySQL 查询按父级排序然后子级排序

    我的数据库中有一个页面表 每个页面可以有一个父页面 如下所示 id parent id title 1 0 Home 2 0 Sitemap 3 0 Products 4 3 Product 1 5 3 Product 2 6 4 Prod
  • 删除 SQL 中重复的字段条目

    无论如何 我可以删除某个表中的所有重复条目 users 这是我拥有的条目类型的示例 我必须说一下桌子users由3个字段组成 ID user and pass mysql query DELETE FROM users WHERE or d
  • DB2 vs PostgreSQL vs SQL Server [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有人用过这三个数据库吗 你和他们有什么经历 PostgreSQL 对于一个项目来说看起来相当诱人 但我很想了解更多关于它的信息 我们是一家 NE
  • 未在 OpenERP 7 中呈现

    我正在使用 OpenERP 7 我想修改我的发票报告页脚以显示当前页面和总页数 如下所示 页数 第一页的 1 2 以及 页数 第二页2 2 这是我的代码
  • MySQL 布尔模式匹配对中间词不返回任何内容

    我在 MySQL 数据库中使用 Match Against 时遇到问题 希望有人能提供帮助 这是我的数据库中的数据示例 id name 1 really bitter chocolate 2 soft cheese 当我运行此查询时 SEL
  • Spring Boot data-jpa 和 nativeQuery Postgres 转换

    我有一个习惯 Query在一个看起来像这样的存储库中 SELECT FROM topicaudit c14001 WHERE auditdate gt NOW AND auditdate lt NOW 1 hour INTERVAL AND
  • 如何在嵌套集中查找特定 level2 节点的特定子节点

    我有一个标准的嵌套集模型 每个节点都有 name lft 和 rgt 属性 我可以使用以下方法找到特定员工的上级 SELECT P2 FROM Personnel AS P1 Personnel AS P2 WHERE P1 lft BET
  • SQL 中的链表

    在 MySQL 数据库中存储链接列表的最佳方法是什么 这样插入就很简单 即 您不必每次都重新索引一堆内容 并且可以轻松地按顺序拉出列表 使用 Adrian 的解决方案 但不是增加 1 而是增加 10 甚至 100 然后可以按照要插入的内容之
  • 使用 java 中的准备好的语句插入自定义 SQL 类型

    我有一些自定义类型 它们基本上都是枚举 以下是它们的外观示例 CREATE TYPE card suit AS ENUM spades clubs hearts diamonds 我在 Java 中有一些准备好的语句 看起来像这样 Setu
  • 如何复制身份列中的数据?

    我有一张桌子identity列在一台服务器中 并且在另一台服务器中有一个具有相同结构的其他表 现在我想将所有数据从一个表复制到另一个表 但我无能为力 我已经创建了一个链接服务器 我用这个 insert into server databas
  • 如何编写具有这种不寻常匹配标准的联接?

    我想要 左连接 一个表 以便值不仅连接到匹配行 而且还连接到任何后续的非匹配行 直到下一个匹配行 换句话说 我想用之前的非空值来填充空值 样本数据和期望结果 Table x id 1 2 3 4 5 Table y id val 1 a 4
  • SQL 查询 - 将查询中的日期格式更改为 DD/MM/YYYY

    我想要实现的目标相当简单 将一种日期格式转换为另一种日期格式 由此 Jan 30 2013 12 00 00 000AM对此 DD MM YYYY或者在这种情况下30 01 2013 但是 当它是该月的 1 号到 9 号时 日期格式缺少零并
  • WHERE 子句中的可选参数[重复]

    这个问题在这里已经有答案了 假设有一个具有 3 个参数的存储过程 在所有可能性中 我希望通过一个单一的方法来实现这一目标WHERE子句不会失去对 using 的控制 AND OR 太多了 Example Params CITY VARCHA

随机推荐

  • 在 Android 中使用 Google Maps API 从用户位置获取附近地点的结果

    这是第一次使用谷歌地图API和谷歌地点API 我正在做一个演示应用程序 它显示距离用户位置最近的医院列表 例如 以及到每家医院的路线 我能够使用下面的代码获取用户的位置 public class MainActivity extends A
  • 为什么对话框会删除其内容而不刷新?

    我遇到了一个非常奇怪的问题 窗口似乎正在擦除其内容 并且在擦除后没有重新绘制它 该对话框源自CDHtmlDialog 我认为这是问题的一部分 发生某种非确定性代码执行 导致某些代码在某些情况下先于其他代码执行 而在其他情况下则相反 涉及的消
  • android可扩展列表视图从firebase检索数据

    我该如何使用firebase检索我的数据Expandable listview my firebase节点是这样的 适配器类 public class CustomExpandableListViewAdapter extends Base
  • 等待进程结束

    您好 我必须编写必须打开一些系统属性的程序 例如 Process sound new Process sound StartInfo FileName mmsys cpl sound Start Place 1 Process device
  • numpy:沿新轴扩展数组?

    当然一定有办法做到这一点 我无法解决 我有一个 9 4 数组 我想沿第三轴重复它 4096 次 所以它变得简单 9 4 4096 9 4 数组中的每个值简单地重复 4096 次沿着新的轴线 如果我可疑的 3D 图有意义 对角线是 z 轴 4
  • 雅可比坐标系中的椭圆曲线加法

    我尝试在素数场上的椭圆曲线上添加两个点 将这些点从仿射 仿射坐标转换 但无法获得正确的结果 我正在测试的曲线有 a 0 任何人都可以看到出了什么问题吗 From Affine BigInteger X1 P x BigInteger Y1
  • SpringBoot应用程序发布并读取ActiveMQ主题

    我有两个应该从一个主题中读取的接收器 但只有一个随机接收者收到消息 就像它实际上是从队列而不是主题中读取的一样 我读了this https stackoverflow com questions 40144561 how to listen
  • 将图框与 PyCharm 结合使用

    我花了将近两天的时间在互联网上滚动 但无法解决这个问题 我正在尝试安装图形框架包 https spark packages org package graphframes graphframes 版本 0 2 0 spark2 0 s 2
  • Android 设备与本地主机服务器的连接[重复]

    这个问题在这里已经有答案了 我是安卓新手 我正在开发一个使用 MySQL 的应用程序 该应用程序在模拟器中运行良好 但现在我需要在 Android 设备中运行该应用程序 我能做些什么 正如第一条评论中所述 您应该检查文件 AndroidMa
  • jQuery:如何使用 live() 捕获按键

    我需要捕获某些动态输入上的选项卡按键事件 但使用按键事件的正常语法似乎无法捕获按键代码 input live keypress function e if e which 9 alert Tab pressed 当我在 firebug 中通
  • 在shell脚本中创建重复字符的字符串[重复]

    这个问题在这里已经有答案了 我需要生成一串点 字符 作为变量 即 在我的 Bash 脚本中 用于输入15我需要生成这个长度为 15 的字符串 我需要以不同的方式这样做 我尝试使用它作为基础 来自 Unix com http www unix
  • 如何限制EditText输入内容

    我正在尝试创建一个简单的计算器 它提供 EditText 供用户输入数字 允许输入的内容应该是 1 2 3 4 5 6 7 8 9 0 我知道可以使用以下代码来限制输入内容 android digits 1234567890 android
  • SQL Server 使用 union all 和分页

    当我们使用 union all 从两个表获取结果时 如何应用分页 下面是这里的代码 我在已用于分页的 row num 列中获取重复值 WITH resultSetCTE AS SELECT ROW NUMBER OVER ORDER BY
  • 动态更改 IOS 应用程序的自定义 URL 方案

    有没有办法在运行时动态更改 ios 应用程序的自定义 URL 方案 我只能找到有关如何静态定义自定义方案的信息 即 自定义方案是在配置文件中预定义的 我想知道这是否可以在运行时动态完成 不 您不能动态更改自定义 url 自定义 url 方案
  • 指定 Winhttp 必须使用哪个网卡/连接

    我有一个 C 应用程序 它利用 Winhttp 发出 Web 请求 有没有办法指定 WinHTTP 必须使用哪个网卡进行连接 WinHTTP 或 WinInet 没有公开可用的选项来执行接口关联 它似乎在 System Net 中通过请求的
  • JAX-RS 和长轮询

    我正在尝试将长轮询与 JAX RS 泽西实现 一起使用 但它无法按我的预期工作 也许我误解了什么 我将不胜感激任何建议 请注意 出于安全原因 不可以选择使用反向连接 例如 Atmosphere Comet 等 并不是说我目前正在使用 Tom
  • SonataAdmin 子管理路由在调试中可见但未找到

    php bin console debug router grep postboxmessage pt RG admin mea postbox postboxmessage list ANY ANY ANY admin mea postb
  • MyBatis SelectList 输出 CopyOnWriteArrayList

    请耐心解答新手问题 因为我正在尝试同时学习 MyBatis 和 java 我有一个应用程序需要使用线程安全变量 根据一些研究和我对如何使用应用程序的想法 我决定使用 CopyOnWriteArrayList 而不是 Vector 当我从 m
  • Matlab 将字符串“aaa”转换为[“a”,“a”,“a”]数组

    所以我在 Matlab 中工作 并且在尝试理解字符串在 Matlab 中如何工作时遇到了一个真正的问题 基本上我正在尝试将字符串加载到其二进制版本的双精度数组中 所以基本上我想加载 a 并获取 0 1 1 0 0 0 0 1 下面的内容将字
  • 多对多关系过滤器

    我需要使用与另一个表具有多对多关系的类别表来过滤查询 是否可以使用多对多关系过滤查询 Table res partner有many2many字段category id与表有关的res partner category res partner