Oli*_*old 3 c# postgresql npgsql dapper
鉴于此表结构:
CREATE TABLE tags
(
id SERIAL NOT NULL PRIMARY KEY,
tagname TEXT NOT NULL UNIQUE,
authorid int NOT NULL,
created timestamp NOT NULL,
lastmodified timestamp NOT NULL,
constraint fk_authorid_tags foreign key(authorid) references users(id)
);
Run Code Online (Sandbox Code Playgroud)
为什么以下查询失败并显示错误:
ERROR: operator does not exist: text = text[]
LINE 2: select * from tags where tagname in ('{"c#","c"}'::text[])
Run Code Online (Sandbox Code Playgroud)
查询:
select * from tags where tagname in ('{"c#","c"}'::text[])
Run Code Online (Sandbox Code Playgroud)
IN 必须包含文字列表,例如
tagname IN ('c#', 'c')
Run Code Online (Sandbox Code Playgroud)
如果你想要一个数组,你必须使用= ANY:
tagname = ANY (ARRAY['c#', 'c'])
Run Code Online (Sandbox Code Playgroud)
由于tagname IN (somearray)被解释为查询" tagname等于1元素列表的任何元素",因此产生错误(somearray).这意味着测试tagname平等somearray,唯一的元素.因为没有=运算符来比较text和text[],这将失败.
相比之下,= ANY"对于右侧阵列的任何元素,左手操作数是否等于元素?".所以它有效.
| 归档时间: |
|
| 查看次数: |
397 次 |
| 最近记录: |