2013-06-27 38 views
-1

帶有重複條目的詞典db。 1是正確的第二個記錄是不同的,不正確的。良好的行在field2中的任何位置都沒有字段1的複合版本。sql搜索記錄field2 like(field1帶有破折號的地方)

不良記錄在第二個字段(定義)中都有來自field1的單詞,但在單詞的某處有短劃線或連字符。

要查找的行的2個示例:A)field1 =母親,字段2具有字M-其他位於字段定義內的其他字; B)field1 = Jackknife,場2在場定義內的某處有Jack-knife。 所以我想到了一個類似的子句,但像(字段1,在字段1中的任何位置帶有連字符)。

如果這不是太混亂,我希望有人可能有一些想法嘗試。如果您需要澄清,請告訴我。非常感謝,甚至看看。

+1

請發佈樣本數據和更多期望的輸出,說明您的問題? – peterm

回答

0

爲了得到壞行

Select field1, field2 
from table 
where replace(field2, '-', '') = field1 

爲了獲得良好的行

Select field1, field2 
from table 
where field1 not like '%-%' 
0

你可以嘗試事端這樣...

-- the bad ones 
SELECT * 
FROM Table_XY 
WHERE REPLACE(field2,'-','') LIKE '%' + field1 + '%' 

-- the good ones 
SELECT * 
FROM Table_XY 
WHERE REPLACE(ISNULL(field2,''),'-','') NOT LIKE '%' + field1 + '%' OR 
     field2 LIKE '%' + field1 + '%' 
+0

我不認爲,使用臨時表來處理這樣一個簡單的查詢是合理的 – user4035

+0

它只是嘗試一些......你根本不需要temp_table。你需要的唯一東西是Where-clause – Tintifax

+0

現在我明白了,你想說明一下,你的查詢是如何工作的 – user4035

0

像這樣的東西應該做的工作:

SELECT * FROM table1 WHERE 
    field1 = REPLACE(field2, "-", "") AND 
    (SELECT LENGTH(field2) - LENGTH(REPLACE(field2, '-', ''))) >= 1; 

有了這個功能,您可以確保兩個字符串都是相同的,而不必記住破折號。該查詢還檢查field2是否有破折號,所以field1 =父和field2 =父將不會被選中,而field1 =父和field2 = F-ather會。

如果您希望它不區分大小寫,您可以在查詢中添加大寫轉換。

SQL Fiddle (example).

相關問題