2014-09-26 57 views
0

我有一個表,如下所示:問題與NOT LIKE

ItemID 
BrandID 

數據如下(其實我加入到另一個表,以獲得品牌文本,但爲了簡便起見我已經把它們放到同一個表在這裏

ItemID  Brand 
    1  Test 
    1  Test2 
    1  stuff 
    2  test 
    3  guy 
    4  girl 
    5  rest 

我做一個包含搜索術語 'ES' 如下:

SELECT DISTINCT(ItemID) FROM Items WHERE Brand LIKE '%es%' 

它返回項目(1,2,5)

我現在想要做一個不包含應該返回項目(3,4),但查詢

SELECT DISTINCT(ItemID) FROM Items WHERE Brand NOT LIKE '%es%' 

也返回第1項作爲第三個項目1不包含「ES」

所以我的問題:

我該如何做一個不包含,它確保它只返回沒有任何記錄包含給定字符串的項目?

我希望我已經明確了這一點。

我使用SqlServer的鈰4.0

回答

1
SELECT DISTINCT(ItemID) 
FROM Items 
WHERE ItemID NOT IN 
     (
      SELECT ItemID 
      FROM Items 
      WHERE Brand LIKE '%es%' 
     ) 
+0

這很好,但需要一個年齡才能完成,我會接受你的答案,然後嘗試使用索引來提高性能 – 2014-09-26 09:13:42

1
SELECT DISTINCT(ItemID) FROM Items WHERE Brand NOT LIKE '%es%' 
EXCEPT 
SELECT DISTINCT(ItemID) FROM Items WHERE Brand LIKE '%es%' 
+1

這也適用SELECT項目ID從裝備WHERE ITEMID NOT IN(SELECT項目ID從裝備WHERE品牌LIKE '%ES%'); – Jayadevan 2014-09-26 09:07:39