使用LIKE与IN进行查询

时间:2012-10-10 23:13:27

标签: sql postgresql join

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

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

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

1 个答案:

答案 0 :(得分:4)

你正在考虑一个角落而不是需要。可以更简单:

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 || '%')