【问题标题】:Find records which have multiple occurrences in another table array (postgres)查找在另一个表数组中多次出现的记录(postgres)
【发布时间】:2020-01-11 20:05:59
【问题描述】:

我有一个表,其中包含数组中的记录。还有另一个表有单字符串记录。我想获取在另一个表中多次出现的记录。以下是表格;

车辆

veh_id |             vehicle_types              
-------+---------------------------------------
    1  | {"byd_tang","volt","viper","laferrari"} 
    2  | {"volt","viper"}                        
    3  | {"byd_tang","sonata","jaguarxf"}        
    4  | {"swift","teslax","mirai"}              
    5  | {"volt","viper"}                        
    6  | {"viper","ferrariff","bmwi8","viper"}   
    7  | {"ferrariff","viper","viper","volt"}  

车辆名称

    id |  vehicle_name
  -----+-----------------------
    1  |  byd_tang
    2  |  volt
    3  | viper
    4  | laferrari
    5  | sonata
    6  |  jaguarxf
    7  |  swift
    8  |  teslax
    9  | mirai
    10 | ferrariff
    11 | bmwi8

我有一个查询可以提供我期望的输出,但它不是最佳的,可能是它昂贵的查询。

这是查询:

select veh_name 
from vehicle_names dsb
where (select count(*) from vehicle dsd
       where dsb.veh_name = ANY (dsd.veh_types)) > 1

输出应该是:

 byd_tang
 volt
 viper

【问题讨论】:

    标签: sql arrays postgresql select


    【解决方案1】:

    一种选择是聚合查询:

    SELECT
       vn.id,
       vn.veh_name
    FROM vehicle_names vn
    INNER JOIN vehicle v
       ON vn. veh_name = ANY (v.veh_types)
    GROUP BY
      vn.id,
      vn.veh_name
    HAVING
      COUNT(*) > 1;
    

    这仅计算出现在另一个表的两个或多个记录中的车辆名称。例如,它不会提取同名出现两次或多次的单个车辆记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      相关资源
      最近更新 更多