2010-03-08 2 views
4

Я пытаюсь найти способ запроса значений в двух разных столбцах в той же таблице, где в результирующем наборе будут указаны экземпляры, где значение столбца B не содержит значения столбца A.Сравнение двух столбцов в одной таблице с функцией «Как»

Например, таблица «Узлы» содержит столбцы «NodeName» и «DNS». Значение должно выглядеть примерно следующим образом:

NodeName DNS 
Router1  Router1.mydomain.com 

Я хочу, чтобы выполнить запрос, чтобы показать, какие строки имеет значение DNS, который не содержит (или начала) значение поля NodeName. Я думаю, что запрос должен функционировать примерно так, как показано ниже, но, очевидно, я упускаю что-то в связи с использованием «Like» в этой ситуации.

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%' сравнивает строку литерал "NODENAME" с DNS

Редактировать:

Nissan Fan добавлено NOT LIKE '%' + NodeName + '%', что означает, что NOT LIKE NodeName + '%' не требуется.

Это зависит от того, хотите ли «содержать» или «начать с»: возьмите свой выбор.

@Nissan Вентилятор: спасибо: вы должны разместить его как свой собственный ответ ...

+0

Yeap ... Это сделало трюк. Большое спасибо. :) – Vic

+1

Я думаю, что при таком подходе вы проигнорируете, что DNS, такой как Router11.mydomain.com, действительно не содержит (или не начинается с) Router1 как NodeName – leoinfo

+0

@leoinfo: хорошая точка. просто «НЕ НРАВИТСЯ 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

Смежные вопросы