2011-11-28 115 views
1

我需要一個查詢來比較一個表中的字符串列表與另一個表中的字符串列表。是否可以使用'NOT LIKE'%%'條件連接兩個表?

的僞代碼可能是:

for each word in slang 
if not word.contains(animalName) { 
    print animalName 
} 
next slang 

它並不一定要快,它不是生產。我試圖調試一些東西,查詢的結果就是我需要處理的東西。

謝謝。

+0

我不明白你的僞代碼。 'slang'是數組的數組嗎?如果不是,你如何做'if(animalName不在字)',因爲這意味着'word'是一個數組?我認爲你的問題有一個錯誤。 –

+1

我是「在SQL Server中儘可能做到的一切」的招貼小孩......但使用應用程序代碼會更容易。 – 2011-11-28 04:30:12

+0

@Louis你可以包括一個例子,或更徹底地解釋你在做什麼?您的問題標題似乎與您的問題主體不匹配。 –

回答

3

不包含一個動物名稱的所有俚語詞:

SELECT word 
FROM slang 
WHERE NOT EXISTS (
    SELECT * 
    FROM animals 
    WHERE word LIKE '%'+ animalName + '%') 
+0

非常感謝。這會爲我節省很多時間。 – Louis

0

也許你可以將數據拉到每個表的.Net集合中,然後使用LNIQ來比較它們。

0

還是想知道,你在找什麼,但這個怎麼樣:

SELECT term AS word FROM slang 
EXCEPT 
SELECT animalName AS word FROM allAnimalNames 
+1

TSQL中沒有'MINUS' - 你可能是指'EXCEPT'? –

+1

謝謝。 'MINUS'在MySQL中,我(錯誤地)認爲它在TSQL中也是一樣的。 –

+0

@RobertMartin:你確定MySQL有'MINUS'嗎?附:我不認爲你的答案會奏效。 – onedaywhen

4

所以,它聽起來就像你有一個表Slang和一個表Animals,並且您希望Slang不包含Animal的所有組合。這是非常簡單的

SELECT s.Word, a.AnimalName 
FROM Slang s INNER JOIN Animal a 
ON s.Word NOT LIKE '%' + a.AnimalName + '%' 

如果你只希望那些不喜歡的動物名稱的話,那麼你就需要選擇那些然後反轉(但後來你怎麼確定哪些「單詞'與哪個'動物名稱'?]

SELECT Word FROM Slang WHERE Word NOT IN 
(SELECT s.Word 
FROM Slang s INNER JOIN Animal a 
ON s.Word LIKE '%' + a.AnimalName + '%') words 
+0

謝謝你弄清楚我想說什麼。我認爲這會起作用,但我還不能確認。我在運行時遇到錯誤:'無法解決類似操作中「Japanese_CI_AI」和「Japanese_Unicode_CI_AI」之間的排序規則衝突。' – Louis

+2

您應該能夠在類似操作's.Word COLLATE'中修復排序規則, Japanese_CI_AI'LIKE ...' –

+0

太棒了,那就是訣竅! – Louis