选择至少匹配列表中所有项目的记录

安德烈亚斯

假设我有以下数据库表:

ID | Name    | Type     | Value|
--- --------- ---------- ------
1  | First   | A        | 10   |
2  | First   | B        | 20   |
3  | First   | C        | 30   |
4  | First   | D        | 40   |
5  | Second  | A        | 10   |
6  | Second  | B        | 20   |

并且返回了先前的查询:

ID | Name    | Type     | Value|
--- --------- ---------- ------
1  | Third   | A        | 10   |
2  | Third   | B        | 20   |
3  | Third   | C        | 30   |

我的问题是:查询第一个表并获取至少具有前一个查询中返回的所有类型的所有记录的最佳方法是什么

在上面的例子中,名称“Third”的类型为 AB C。使用这些作为列表,我只想检索“First”记录(因为“First”有 ABCD)而不是“Second”(因为“Second”有只有 AB - 缺少 C)。

IN 语句匹配所有内容,我希望查询至少匹配我的“类型”列表中的所有项目。该列表不一定来自 sql 语句,但可以提供

编辑:我正在使用 MySQL

vol7ron

询问

包括针对任一数据库的相同查询的两种变体。


MySQL

DB小提琴

SELECT main.* 
FROM   main
LEFT JOIN (
  SELECT name, json_arrayagg(type) as type
  FROM main
  GROUP BY name
) AS main_agg USING(name)

WHERE EXISTS (
  SELECT 1
  FROM (
    select json_arrayagg(type) as type
    from query 
    group by name
  ) AS query_agg
  WHERE JSON_CONTAINS(main_agg.type, query_agg.type)
)
  • 按名称分组类型
  • 使用JSON_CONTAINS函数将表与查询进行比较

Postgres

SQLFiddle

WITH main_agg AS
(
  SELECT name, array_agg(type) "type"
  FROM main
  GROUP BY name
)

SELECT main.* 
FROM   main
JOIN   main_agg USING(name)
WHERE EXISTS (
  SELECT 1
  FROM (select array_agg(type) "type" from query group by name) query_agg
  WHERE main_agg."type" @> query_agg."type"
)
  • 按名称分组类型
  • 利用数组@>包含运算符)与查询进行比较

设置

(适用于 MySQL 或 PostgreSQL)

CREATE TABLE main
    (ID int, Name varchar(6), Type varchar(1), Value int)
;

INSERT INTO main
    (ID, Name, Type, Value)
VALUES
    (1, 'First', 'A', 10),
    (2, 'First', 'B', 20),
    (3, 'First', 'C', 30),
    (4, 'First', 'D', 40),
    (5, 'Second', 'A', 10),
    (6, 'Second', 'B', 20)
;


CREATE TABLE query
    (ID int, Name varchar(5), Type varchar(1), Value int)
;

INSERT INTO query
    (ID, Name, Type, Value)
VALUES
    (1, 'Third', 'A', 10),
    (2, 'Third', 'B', 20),
    (3, 'Third', 'C', 30)
;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有BeautifulSoup的queryset中所有项目的列表

来自分类Dev

如何在选择或单击列表中的单个项目时更新 FlatList 中所有项目的 UI 设计

来自分类Dev

Firebird如何选择与集合中所有项目匹配的ID

来自分类Dev

如何选择匹配列表中所有值的值?

来自分类Dev

选择显示所有项目的下拉列表

来自分类Dev

选择具有一对多关系的记录,其中所有记录都在列表中

来自分类Dev

如何有效获取列表中所有项目的索引中的序数位置

来自分类Dev

django select2插件中所有选定项目的列表

来自分类Dev

JPQL-JPA实体的集合成员中所有项目的列表

来自分类Dev

C# 查找列表框中所有项目的选中状态

来自分类Dev

模型列表中所有项目的所有单选按钮都组合在一起

来自分类Dev

模型列表中所有项目的所有单选按钮都组合在一起

来自分类Dev

Python Pandas Multiindexing选择与列表中所有值匹配的行

来自分类Dev

MongoDB:引用集合中所有项目的总和

来自分类Dev

如何测试容器中所有项目的价值?

来自分类Dev

WPF:同步ItemsControl中所有项目的宽度

来自分类Dev

for循环kotlin android中所有项目的总和

来自分类Dev

动态更改ListView中所有项目的文本颜色

来自分类Dev

获取数据表中所有项目的ID

来自分类Dev

选择表中所有条目的更新表

来自分类Dev

替换列表中子列表中所有出现的项目

来自分类Dev

Robotframework:如何在选择字段中接收所有项目的列表?

来自分类Dev

从选择多个=“多个”选项下拉列表中获取所有选定项目的名称

来自分类Dev

生成指定子网中所有DNS记录的列表

来自分类Dev

生成指定子网中所有DNS记录的列表

来自分类Dev

汇总列表中所有记录的Datetime属性

来自分类Dev

WPF MVVM:用于选择/取消选择所有列表视图项目的列表视图复选框标题

来自分类Dev

CLion项目中所有错误的列表

来自分类Dev

如何汇总列表中所有共享特定属性的项目?

Related 相关文章

  1. 1

    带有BeautifulSoup的queryset中所有项目的列表

  2. 2

    如何在选择或单击列表中的单个项目时更新 FlatList 中所有项目的 UI 设计

  3. 3

    Firebird如何选择与集合中所有项目匹配的ID

  4. 4

    如何选择匹配列表中所有值的值?

  5. 5

    选择显示所有项目的下拉列表

  6. 6

    选择具有一对多关系的记录,其中所有记录都在列表中

  7. 7

    如何有效获取列表中所有项目的索引中的序数位置

  8. 8

    django select2插件中所有选定项目的列表

  9. 9

    JPQL-JPA实体的集合成员中所有项目的列表

  10. 10

    C# 查找列表框中所有项目的选中状态

  11. 11

    模型列表中所有项目的所有单选按钮都组合在一起

  12. 12

    模型列表中所有项目的所有单选按钮都组合在一起

  13. 13

    Python Pandas Multiindexing选择与列表中所有值匹配的行

  14. 14

    MongoDB:引用集合中所有项目的总和

  15. 15

    如何测试容器中所有项目的价值?

  16. 16

    WPF:同步ItemsControl中所有项目的宽度

  17. 17

    for循环kotlin android中所有项目的总和

  18. 18

    动态更改ListView中所有项目的文本颜色

  19. 19

    获取数据表中所有项目的ID

  20. 20

    选择表中所有条目的更新表

  21. 21

    替换列表中子列表中所有出现的项目

  22. 22

    Robotframework:如何在选择字段中接收所有项目的列表?

  23. 23

    从选择多个=“多个”选项下拉列表中获取所有选定项目的名称

  24. 24

    生成指定子网中所有DNS记录的列表

  25. 25

    生成指定子网中所有DNS记录的列表

  26. 26

    汇总列表中所有记录的Datetime属性

  27. 27

    WPF MVVM:用于选择/取消选择所有列表视图项目的列表视图复选框标题

  28. 28

    CLion项目中所有错误的列表

  29. 29

    如何汇总列表中所有共享特定属性的项目?

热门标签

归档