Я уверен, делает глупые ошибки, но я могу'т понять, что:
В SQL Server 2005, что я пытаюсь выбрать всех клиентов, кроме тех, которые сделали предварительный заказ до 2-х ночи.
Когда я запускаю этот запрос:
SELECT idCustomer FROM reservations
WHERE idCustomer NOT IN
(SELECT distinct idCustomer FROM reservations
WHERE DATEPART ( hour, insertDate) < 2)
Я получаю 0 результатов.
Но
SELECT idCustomer FROM reservations
возвращает 152.000 результаты и "не в" части:
SELECT distinct idCustomer FROM reservations
WHERE DATEPART ( hour, insertDate) < 2
возвращает только строки 284
SELECT distinct idCustomer FROM reservations
WHERE DATEPART ( hour, insertDate) < 2
and idCustomer is not null
Убедитесь, что ваш параметр список не содержит значения null.
Здесь'ы объяснение:
WHERE field1 NOT IN (1, 2, 3, null)
такой же как:
WHERE NOT (field1 = 1 OR field1 = 2 OR field1 = 3 OR field1 = null)
(*) Изменение: это объяснение очень хорошо, но я хотел бы остановиться на одной вещи, чтобы предотвратить будущие придирки. (Правда или null) возвращает true. Это имеет значение, если поле1 = 3, например. Истинная ценность могут быть нарушены в false и строки будут отфильтрованы.
Это's всегда опасно иметь нуль
в в
список - он часто ведет себя, как ожидалось для В
, но не не в
:
IF 1 NOT IN (1, 2, 3, NULL) PRINT '1 NOT IN (1, 2, 3, NULL)'
IF 1 NOT IN (2, 3, NULL) PRINT '1 NOT IN (2, 3, NULL)'
IF 1 NOT IN (2, 3) PRINT '1 NOT IN (2, 3)' -- Prints
IF 1 IN (1, 2, 3, NULL) PRINT '1 IN (1, 2, 3, NULL)' -- Prints
IF 1 IN (2, 3, NULL) PRINT '1 IN (2, 3, NULL)'
IF 1 IN (2, 3) PRINT '1 IN (2, 3)'
Учитывая это'С в SQL 2005, вы можете также попробовать это Это'ы похож на Oracle'команда минус (напротив Союза)
Но я также предложил бы добавить функции datepart ( час, insertDate) колонки для отладки
SELECT idCustomer FROM reservations
EXCEPT
SELECT idCustomer FROM reservations WHERE DATEPART ( hour, insertDate) < 2
Извините, если я'вэ пропустил этот момент, но не'т следующие делать то, что вы хотите на нем's собственное?
SELECT distinct idCustomer FROM reservations
WHERE DATEPART(hour, insertDate) >= 2
SELECT Reservations.idCustomer FROM Reservations (nolock)
LEFT OUTER JOIN @reservations ExcludedReservations (nolock) ON Reservations.idCustomer=ExcludedReservations.idCustomer AND DATEPART(hour, ExcludedReservations.insertDate) < 2
WHERE ExcludedReservations.idCustomer IS NULL AND Reservations.idCustomer IS NOT NULL
GROUP BY Reservations.idCustomer
[Обновление: добавлены дополнительные критерии для обработки idCustomer быть null, который был, видимо, главный вопрос оригинальный плакат имел]
SELECT MIN(A.maxsal) secondhigh
FROM (
SELECT TOP 2 MAX(EmployeeBasic) maxsal
FROM M_Salary
GROUP BY EmployeeBasic
ORDER BY EmployeeBasic DESC
) A
select * from table_name where id=5 and column_name not in ('sandy,'pandy');