6

是否可以使用带有 IN 函数的 ILIKE 运行查询?例如:

SELECT store_names
FROM stores
WHERE states ILIKE IN (SELECT location
                       FROM   locations
                       WHERE  stateID = 1)

我想通过 ILIKE 函数运行嵌套查询返回的结果。有没有办法做到这一点?

4

1 回答 1

5

您正在考虑比需要的多一个角落。可以更简单:

SELECT s.store_names, l.location
FROM   stores s
JOIN   (
   SELECT location
   FROM   locations
   WHERE  stateid = 1
   ) l ON s.states ILIKE l.location

我只使用子选择来提高性能。不确定查询计划器是否足够聪明,可以通过这个更简单的查询(以及您的 Postgres 版本)使用相同的计划:

SELECT s.store_names, l.location
FROM   stores s
JOIN   locations l ON s.states ILIKE l.location
WHERE  l.stateid = 1

也许您可以尝试(使用EXPLAIN ANALYZE)并报告他们是否使用相同的计划(并执行相同的计划)?

而且我怀疑您实际上需要%为您的目的添加:

... ON s.states ILIKE ('%' || l.location || '%')
于 2012-10-10T23:24:48.637 回答