2012-10-10 55 views
4

使用INI函数可以使用ILIKE运行查询吗?例如:使用ILIKE和IN查询

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

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

回答

3

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

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

伟大的工作,谢谢! – Utopia025