我正在使用IN子句来检索包含某些标记的地方。为此我只需使用
select .. FROM table WHERE tags IN (...)
现在我在IN子句中提供的标签数量大约是500个,但很快(在不久的将来)数字标签很可能会跳到5000以上(甚至更多)
我猜测查询的大小和IN子句中的数字值都有某种限制(好奇心的奖励问题是什么值?)
所以我的问题是什么是一个很好的替代查询,即使在将来我会匹配让我们说10'000个标签,这将是未来的证据?
ps:我环顾四周,看到有人提到“临时桌”。我从来没用过那些。他们将如何在我的案件中使用?我每次进行查询时都需要创建一个临时表吗?谢谢, 弗朗西斯
答案 0 :(得分:3)
一种选择是将其加入values
子句
with parms (tag) as (
values ('tag1'), ('tag2'), ('tag3')
)
select t.*
from the_table t
join params p on p.tag = t.tag;
答案 1 :(得分:1)
您可以使用以下方式创建表格:
tablename
id | tags
----+----------
1 | tag1
2 | tag2
3 | tag3
然后做:
select .. FROM table WHERE tags IN (SELECT * FROM tablename)