#sql #sql-server-2008
#sql #sql-server-2008
Вопрос:
Хорошо, вот мой SQL:-
SELECT Telephone,
Houseno,
Street,
Tostreet,
Passengername,
Acceptancedate
FROM Telephone
WHERE Acceptancedate !> '2014/05/01'
AND Telephone LIKE '011%'
AND ( Zoneno = '6'
OR Zoneno = '5'
OR Zoneno = '9'
OR Zoneno = '108' )
AND Telephone = 'XXX'
ORDER BY Acceptancedate
Это отображает 5 записей для этого телефонного номера.
Однако, если я изменю !>
на >
он показывает 3 записи.
SQL, который у меня есть, правильный, но я хочу отображать цифры только в том случае, если этот номер телефона не отображается, когда AcceptanceDate > '2014/05/01'
(поскольку номера телефонов не уникальны)
Любая помощь будет высоко оценена!
Комментарии:
1. Каков именно ваш вариант использования? Если вы измените операторы в операторе where, то очевидно, что вы получите разные результаты, так что вы пытаетесь сказать, изменив!> на>?
2. В принципе, я хочу отобразить все номера из приведенного выше SQL, ГДЕ телефона нет в следующем запросе; ВЫБЕРИТЕ * из телефона, ГДЕ Acceptancedata> ‘2014/05/01’
Ответ №1:
Вы могли бы использовать NOT EXISTS
для исключения телефонных номеров, которые появляются после определенной даты
SELECT Telephone,
Houseno,
Street,
Tostreet,
Passengername,
Acceptancedate
FROM Telephone AS t
WHERE Telephone LIKE '011%'
AND Zoneno IN ('6', '5', '9', '108')
AND Telephone = 'XXX'
AND NOT EXISTS
( SELECT 1
FROM Telephone AS t2
WHERE t2.Telephone = t.Telephone
AND t2.Acceptancedate > '20140501'
);
Комментарии:
1. Спасибо, это именно то, что мне было нужно 🙂
Ответ №2:
Вы должны написать where
предложение следующим образом:
WHERE Acceptancedate <= '2014-05-01' AND
Telephone LIKE '011%' AND
Zoneno IN ('6', '5', '9', '108') AND
Telephone = 'XXX'
Это не изменит результат, но вот изменения:
!<
не является стандартным оператором сравнения. Используйте<=
то, что понятнее.- Я изменил формат даты на стандартный формат ISO ГГГГ-ММ-ДД
- Я изменил сравнение
ZoneNo
s на использованиеIN
, а неOR
Кроме того, я отмечаю два сравнения Telephone
. Первый является избыточным.