Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找在另一个表数组(postgres)中多次出现的记录_Sql_Arrays_Postgresql_Select - Fatal编程技术网

Sql 查找在另一个表数组(postgres)中多次出现的记录

Sql 查找在另一个表数组(postgres)中多次出现的记录,sql,arrays,postgresql,select,Sql,Arrays,Postgresql,Select,我有一个在数组中有记录的表。还有另一个表有单字符串记录。我想获取在另一个表中多次出现的记录。下表为: 车辆 veh_id | vehicle_types -------+--------------------------------------- 1 | {"byd_tang","volt","viper","laferrari"} 2 | {"volt","viper"}

我有一个在数组中有记录的表。还有另一个表有单字符串记录。我想获取在另一个表中多次出现的记录。下表为:

车辆

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

一个选项是聚合查询:

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;

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

一个选项是聚合查询:

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;
这仅统计出现在另一个表中两个或多个记录中的车辆名称。例如,它不会拾取出现两次或更多次相同名称的单个车辆记录