"WHERE x IN y" 带有 dapper 和 postgresql 的子句抛出 42601:\"$1\" 处或附近的语法错误
"WHERE x IN y" clause with dapper and postgresql throwing 42601: syntax error at or near \"$1\"
我有一个字符串数组,我想要一个包含 IN 子句的查询,例如:
"... WHERE t.name IN ('foo', 'bar', 'baz')..>"
这是我查询的最后一部分,其中包含一个 "where X in Y" 子句:
...
left join genre_tag_band_join tj on hb.id = tj.band_id or ob.id = tj.band_id
left join genre_tags t on tj.genre_tag_id = t.id
inner join venues v on e.venue_id = v.id
where t.name IN @tagsParam...
我这样调用 Dapper
var shows = con.Query<Event, Band, Band, GenreTag, Venue, Event>(query, (e, hb, ob, gt, v) =>
{
Event show;
...
return e;
},
new { tagsParam = tagsArr}).AsQueryable();
其中 tagsArr 是一个字符串[]。
我遇到异常:
{"42601: syntax error at or near \"\""}
在 PostgreSQL 中,您不能使用 IN 来检查一个值是否在数组内,您必须使用以下 PostgreSQL 特定的语法:where t.name = ANY (@tagsParam)
。请参阅 PostgreSQL docs.
中的第 8.15.5 节
我有一个字符串数组,我想要一个包含 IN 子句的查询,例如:
"... WHERE t.name IN ('foo', 'bar', 'baz')..>"
这是我查询的最后一部分,其中包含一个 "where X in Y" 子句:
...
left join genre_tag_band_join tj on hb.id = tj.band_id or ob.id = tj.band_id
left join genre_tags t on tj.genre_tag_id = t.id
inner join venues v on e.venue_id = v.id
where t.name IN @tagsParam...
我这样调用 Dapper
var shows = con.Query<Event, Band, Band, GenreTag, Venue, Event>(query, (e, hb, ob, gt, v) =>
{
Event show;
...
return e;
},
new { tagsParam = tagsArr}).AsQueryable();
其中 tagsArr 是一个字符串[]。
我遇到异常:
{"42601: syntax error at or near \"\""}
在 PostgreSQL 中,您不能使用 IN 来检查一个值是否在数组内,您必须使用以下 PostgreSQL 特定的语法:where t.name = ANY (@tagsParam)
。请参阅 PostgreSQL docs.