我在PostgreSQL中有一个JSONB
对象:
'{"cars": ["bmw", "mercedes", "pinto"], "user_name": "ed"}'
我正在尝试在SELECT
语句的WHERE
子句中使用 "cars" 数组中的值:
SELECT car_id FROM cars WHERE car_type IN ('bmw', 'mercedes', 'pinto');
这将正确返回值1、2和3——请参见本帖底部的表格设置。
目前,在我的函数中,我这样做:
(1) Extract the "cars" array into a variable `v_car_results`.
(2) Use that variable in the `WHERE` clause.
Pseudo code:
DECLARE v_car_results TEXT
BEGIN
v_car_results = '{"cars": ["bmw", "mercedes", "pinto"], "user_name": "ed"}'::json#>>'{cars}';
-- this returns 'bmw', 'mercedes', 'pinto'
SELECT car_id FROM cars WHERE car_type IN ( v_car_results );
END
然而,SELECT
语句没有返回任何行。我知道它将这3种汽车类型看作是一个单个的类型。(如果我只在“cars”元素中包含一种car_type
,查询就可以正常工作。)
我该如何在WHERE
子句中将这些值视为一个数组呢?
我尝试了其他一些方法:
The
ANY
clause.Various attempts at casting.
These queries:
SELECT car_id FROM cars WHERE car_type IN (json_array_elements_text('["bmw", "mercedes", "pinto"]')); ... WHERE car_type IN ('{"cars": ["bmw", "mercedes", "pinto"], "user_name": "ed"}':json->>'cars');
感觉我错过了某些简单的东西。但在这个问题上,我已经陷入了困境。(也许我甚至不应该使用::json#>>
运算符?)
表格设置
CREATE TABLE cars (
car_id SMALLINT
, car_type VARCHAR(255)
);
INSERT INTO cars (car_id, car_type)
VALUES
(1, 'bmw')
, (2, 'mercedes')
, (3, 'pinto')
, (4, 'corolla');
SELECT car_id FROM cars
WHERE car_type IN ('bmw', 'mercedes', 'pinto'); -- Returns Values : 1, 2, 3