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

标签 sql arrays postgresql select

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

车辆

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"}  

vehicle_names

    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;

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

关于sql - 查找在另一个表数组中多次出现的记录(postgres),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57864461/

相关文章:

java - 可以手动将 JSON 或 JSONB postgresql 数据类型与 spring r2dbc 一起使用吗?

sql - 选择日期的特定值的平均值

sql - Impala 中的增量整数 ID

sql - 如何通过使用另一列的数据过滤一列来过滤 SQL 查询的结果

包含当月所有日期的 Php 数组

sql - 使用自连接在 row_to_json() 中复制 JSON 元素

具有不同记录的 SQL 增量计算

c - 如何声明具有 volatile 元素的静态数组?

php - 数组 - Orderby - 类型

列表列的 SQL WHERE 子句