postgresql - 如何在 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');
解决方案
SELECT name
FROM hobbies
WHERE id IN
(SELECT unnest(hobbies) FROM visitor WHERE visitor.name = 'sanghin');
您的子查询返回一组数组。然后,您尝试将文本与集合的元素进行比较。因此,您正在尝试将类型text
与text[]
不起作用的类型进行比较。取消嵌套数组会为您提供一组文本值。比较有效。
推荐阅读
- macos - zsh: command not found: heruko - 如何在 Mac Catalina 上使用 Heroku CLI 启动和运行?
- android - 使用协程作用域编译 Kotlin 函数时出现 JVM 错误
- java - 使用 TestNG、Appium 和 Selenium 运行并行和顺序测试
- ruby-on-rails - ActionController::ParameterMissing(参数丢失或值为空:matatu)ruby on rails
- azure - Azure DevOps - 如何使用 TFVC 在管道任务中以编程方式创建分支
- angular - @angular/router:未检索到路由数据
- java - 服务器处理命令
- html - 未知错误:如果满足条件,则在 HTML 代码中播放音频
- javascript - OpenWeatherMap API:无法读取未定义的属性
- twilio - 您如何在 Twilio 工作室中使用两个 if_value_matches?