2014-04-01 85 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中存在的內容。

相關問題