2010-03-08 60 views
4

我試圖想出一種方法來查詢同一個表中兩個不同列中的值,其中結果集將指示實例中columnB的值不包含columnA的值。使用「Like」函數比較同一個表中的2列

例如,我的「節點」表包含列「NodeName」和「DNS」。 值應類似於如下:

NodeName DNS 
Router1  Router1.mydomain.com 

我想運行一個查詢,以顯示該行具有不包含(或開頭)節點名稱字段的值DNS值。我認爲這個查詢的功能應該類似於以下內容,但顯然我錯過了在這種情況下使用「贊」的一些事情。

SELECT NodeName, DNS 
WHERE DNS NOT LIKE 'NodeName%' 

我使用的是SQL Server 2005中,任何建議將不勝感激... :)

回答

5
SELECT NodeName, DNS 
WHERE DNS NOT LIKE NodeName + '%' AND DNS NOT LIKE '%' + NodeName + '%' 

DNS LIKE 'NodeName%'是字符串 「節點名」 與DNS比較

編輯:

Nissan Fan添加了NOT LIKE '%' + NodeName + '%'這意味着不需要NOT LIKE NodeName + '%'

這取決於如果想要「包含」或「開始於」:請選擇。

@Nissan範:感謝:你應該張貼它作爲自己的答案...

+0

Yeap ...這個伎倆。非常感謝你。 :) – Vic

+1

我認爲這種方法最終會忽略像Router11.mydomain.com這樣的DNS並不真正包含(或開始)Router1作爲NodeName – leoinfo

+0

@leoinfo:好點。只需要一個'NOT LIKE NodeName +'。%''然後或類似的 – gbn

0
SELECT USR.USER_ID, USR.LDAP_TITLE, LRM.LDAP_ROLE, LRM.ROLE_ID, RLS.PRIMARY_ROLE 
FROM USERS USR, NEW_LDAP_ROLE_MATCH LRM, NEWROLES RLS 
WHERE (INSTR(USR.LDAP_TITLE,LRM.LDAP_ROLE) > 0) 
AND LRM.ROLE_ID = RLS.ROLE_ID; 

花了大量的時間來獲取場景working.Check如下鏈接SQL查詢。 http://www.anaesthetist.com/mnm/sql/query.htm