SQL, если оператор, в где пункт для поиска базы данных

Если класс Object не является классом java.lang.Object (учебник не включает импорт, поэтому его трудно увидеть), extends Object является избыточным.

14
задан GEOCHET 9 May 2009 в 12:57
поделиться

5 ответов

select tblVillas.*, tblWeeklyPrices.price 
from tblVillas
INNER JOIN tblWeeklyPrices on tblVillas.villaId = tblWeeklyPrices.villaFK
where (@accomodationFK IS null OR accomodationTypeFK = @accomodationFK)
  AND (@regionFK IS null or regionFK = @regionFK)
  AND (@sleeps IS null OR sleeps = @sleeps)
  AND (@priceFloor IS null OR (price BETWEEN @priceFloor And @priceCeil))
25
ответ дан 1 December 2019 в 12:28
поделиться

Мы использовали много из COALESCE здесь в прошлом для" динамические операторы Where ", как Вы говорите о.

SELECT *
FROM  vehicles
WHERE ([vin]   LIKE COALESCE(@vin, [vin])     + '%' ESCAPE '\')
  AND ([year]  LIKE COALESCE(@year, [year])   + '%' ESCAPE '\')
  AND ([make]  LIKE COALESCE(@make, [make])   + '%' ESCAPE '\')
  AND ([model] LIKE COALESCE(@model, [model]) + '%' ESCAPE '\')

А большая проблема возникает, хотя то, когда Вы хотите дополнительно отфильтровать для столбца, который также nullable..., если данные в столбце null для данной строки И пользователя, не ввело ничего для поиска тот столбец (таким образом, ввод данных пользователем также null), затем та строка даже не обнаружится в результатах (который, если фильтры являются дополнительными, неправильное исключающее поведение).

для компенсации nullable полей, Вы заканчиваете тем, что имели необходимость сделать более грязно выглядящий SQL как так:

SELECT *
FROM  vehicles
WHERE (([vin]   LIKE COALESCE(@vin, [vin])     + '%' ESCAPE '\')
       OR (@vin IS NULL AND [vin] IS NULL))
  AND (([year]  LIKE COALESCE(@year, [year])   + '%' ESCAPE '\')
       OR (@year IS NULL AND [year] IS NULL))
  AND (([make]  LIKE COALESCE(@make, [make])   + '%' ESCAPE '\')
       OR (@make IS NULL AND [make] IS NULL))
  AND (([model] LIKE COALESCE(@model, [model]) + '%' ESCAPE '\')
       OR (@model IS NULL AND [model] IS NULL))
0
ответ дан 1 December 2019 в 12:28
поделиться

Именно так Вы понимаете, ЕСЛИ процессуальный кодекс в T-SQL. Это не может использоваться во вставить/обновить/удалить/выбрать операторе, который это может только использоваться для определения, какой из двух операторов Вы хотите выполнить. При необходимости в различных возможностях в операторе можно сделать как выше или использовать Оператор выбора.

0
ответ дан 1 December 2019 в 12:28
поделиться

Можно также использовать IsNull или Объединить функцию

Where accomodationTypeFK = IsNull(@accomodationFK, accomodationTypeFK)
    And regionFK = Coalesce(@regionFK,regionFK)
    And sleeps = IsNull(@sleeps,sleeps ) 
    And price Between IsNull(@priceFloor, Price) And IsNull(priceCeil, Price)  

, Это делает то же самое как предложение Michael выше...

IsNull (), и Объединяют () работу более или менее тот же путь, они возвращают первый ненулевой аргумент в списке, кроме iSNull только позволяет 2 аргумента, и Объедините, может взять любое число...

http://blogs.msdn.com/sqltips/archive/2008/06/26/differences-between-isnull-and-coalesce.aspx

0
ответ дан 1 December 2019 в 12:28
поделиться

Попробуйте поместить ваш IF оператор вокруг всего SQL оператора. Это значит, что для каждого условия будет один SQL-оператор. Это сработало.

-2
ответ дан 1 December 2019 в 12:28
поделиться