2014-04-01 84 views
0

我想查找一个表格中不在另一个表格列中的所有记录。我可以这样做这个查询:在一个表格中选择不在另一个模式匹配的记录

SELECT 
    kywd 
FROM 
    from_client 
WHERE 
    kywd NOT IN 
     (SELECT 
      kywd 
     FROM 
      from_me); 

但是,我想扩大这允许一些模式匹配。至少我想看看from_clientkywd是否出现在from_mekywd的任何地方。所以,就像,'%kywd%'。我试着...... WHERE '%' || kywd || '%' NOT IN ......作为一个疯狂的猜测,结果集实际上被返回,但我怀疑这个语法只是乱码。

如何让这个select语句允许这些通配符?

+0

这是一次性操作,或者是性能的重要更快? –

+0

@ErwinBrandstetter只有一次!可能是低效的必要条件。 – 1252748

回答

1

not exists很可能会比加入

select kywd 
from from_client 
where not exists (
    select 1 
    from from_me 
    where position(from_client.kywd, kywd) > 0 
) 
0

尝试沿着这些线。

SELECT 
    kywd 
FROM 
    from_client 
LEFT OUTER JOIN from_me ON 
from_client.kywd like from_me.kywd -- replace with whatever appropriate 
WHERE 
from_me.some_id IS NULL 

通过,我的意思是 “与任何合适的替代”:

from_client.kywd LIKE '%' || from_me.kywd || '%'

from_me.kywd LIKE '%' || from_client.kywd || '%'

或任何其他情况下是合适的存在。

1
SELECT from_client.kywd 
FROM from_client 
LEFT JOIN from_me 
    ON from_client.kywd LIKE '%' || from_me.kywd || '%' 
WHERE from_me.kywd IS NULL 
0

您可以尝试使用EXCEPT声明。在你的情况下,它会像

SELECT kywd 
FROM from_client 
--WHERE <Conditions here> 
except 
SELECT kywd 
FROM from_me 
--WHERE <Conditions here> 

并返回from_message中不存在的from_message中存在的内容。

相关问题