首页 > 解决方案 > 如何在 text[] 列数据类型上使用 in 运算符?

问题描述

我正在尝试在列中使用IN运算符。text[]但我收到了这个错误信息:

ERROR: operator does not exist: text = text[] Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.

在这种情况下是否可以使用 IN 运算符?如果不是我应该使用什么?

我尝试转换为 json/jsonb、useANY或 @> 运算符但没有成功

可重现的例子:

CREATE TABLE visitor (name varchar(255), hobbies text[]);
CREATE TABLE hobbies(name varchar(255), id text);

INSERT INTO visitor (name, hobbies) VALUES ('sanghin', '{ida}');
INSERT INTO hobbies (name, id) VALUES ('sql', 'ida');

SELECT name FROM hobbies WHERE id IN (SELECT hobbies FROM visitor WHERE visitor.name = 'sanghin');

标签: postgresql

解决方案


演示:db<>小提琴

SELECT name 
FROM hobbies 
WHERE id IN 
     (SELECT unnest(hobbies) FROM visitor WHERE visitor.name = 'sanghin');

您的子查询返回一组数组。然后,您尝试将文本与集合的元素进行比较。因此,您正在尝试将类型texttext[]不起作用的类型进行比较。取消嵌套数组会为您提供一组文本值。比较有效。


推荐阅读