Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Условие по несольким столбцам в Where  [new]
Maximusu
Member

Откуда:
Сообщений: 22
Добрый день, друзья!

Есть потребность выбрать строки, у которых хотя-бы в одном из 4-х столбцов есть заданное слово

Вот 2 варианта.
Оба работают, но выдают значительно отличающиеся результаты

SELECT (model+марка+модель+серия) as s 
FROM [ExcelAnalasys].[dbo].[cleardb]
where [Марка(Эталон)]='MAN' 
and (model+марка+модель+серия)  like  '%tga%'


SELECT (model+марка+модель+серия) as s 
FROM [ExcelAnalasys].[dbo].[cleardb]
where [Марка(Эталон)]='MAN' 
and model like '%tga%' or марка like '%tga%' or модель like '%tga%' or серия like '%tga%'


На поверку оказалось, что второй вариант нахватал записей, в которых
результат объединения "s" = NULL

Если поставить во втором куске проверку is not null, данные совпадают.

Почему так?
31 май 17, 00:17    [20525722]     Ответить | Цитировать Сообщить модератору
 Re: Условие по несольким столбцам в Where  [new]
Maximusu
Member

Откуда:
Сообщений: 22
Немного поправил второй код, отделив скобками условия слева и справа от AND
Но суть та же.

SELECT (model+марка+модель+серия) as s
FROM cleardb --, Dict d
where ([Марка(Эталон)]='MAN'[b])[/b] and[b] ([/b]model like '%tga%' or марка like '%tga%' or модель like '%tga%' or серия like '%tga%') 
order by s
31 май 17, 00:27    [20525733]     Ответить | Цитировать Сообщить модератору
 Re: Условие по несольким столбцам в Where  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Null+line =null, null like line = false

1=1 or null = true

Перепишите на
(isnull(model,'')+isnull(марка,'')+isnull(модель,'')+isnull(серия,''))
31 май 17, 00:38    [20525744]     Ответить | Цитировать Сообщить модератору
 Re: Условие по несольким столбцам в Where  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
Maximusu
На поверку оказалось, что второй вариант нахватал записей, в которых
результат объединения "s" = NULL
Именно второй вариант выдаёт правильный результат: "выбрать строки, у которых хотя-бы в одном из 4-х столбцов есть заданное слово"
Но, что бы увидеть этот результат, нужно его правильно вывести:
Rankatan
Перепишите на
(isnull(model,'')+isnull(марка,'')+isnull(модель,'')+isnull(серия,''))
31 май 17, 09:41    [20526115]     Ответить | Цитировать Сообщить модератору
 Re: Условие по несольким столбцам в Where  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20517
Maximusu
and (model+марка+модель+серия)  like  '%tga%'

model='t'
marka='ga'
31 май 17, 09:55    [20526169]     Ответить | Цитировать Сообщить модератору
 Re: Условие по несольким столбцам в Where  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Rankatan
null like line = false
Строго говоря, нет
31 май 17, 10:58    [20526436]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить