2014-02-06 3 views
0

Я хочу получить начальное время, но оно не должно находиться между начальным и конечным временем (выборка с помощью ссылки на другую таблицу). Я пробовал, но я получаю ошибку. Может ли кто-нибудь помочь мне в этом?Выберите время начала между временем начала и окончания

SELECT DISTINCT right(start_time,7) AS st_time 
FROM Session_Info 
WHERE CourseName = 'Java' 
    AND (right(start_time,7) NOT IN BETWEEN 
     (SELECT right(start_time,7) 
      FROM Session_Info 
      WHERE Session_Id IN 
       (SELECT Session_Id 
       FROM sessions 
       WHERE UserId='a')) AND 
     (SELECT right(end_time,7) 
      FROM Session_Info 
      WHERE Session_Id IN 
       (SELECT Session_Id 
       FROM sessions 
       WHERE UserId='a'))) 

Также я повторно использовать тот же запрос, как (выберите session_id из сессий, где UserId = «а»), как хранить его в переменной?

+0

Какую ошибку вы получаете? Кроме того, пара комментариев - «in between» - недействительный синтаксис; и обычно вам следует использовать операторы 'join', а не' in', производительность вашего запроса будет сильно отличаться. – theMayer

+0

Получение неправильного синтаксиса рядом с – user3273950

+0

Ключевое слово 'BETWEEN' - это когда вы сравниваете одно (скалярное) значение с двумя другими одиночными значениями. У вас неправильное использование ключевых слов, смешанных с неправильным использованием подзапросов, которые скорее всего вернут список/набор информации вместо одного значения. Возможно, вы можете четко указать, какие данные вы хотите, и люди могут написать какой-нибудь SQL, который работает? Также сообщите нам, какую базу данных вы используете. –

ответ

0

Вы можете переписать код, чтобы что-то вроде

SELECT DISTINCT right(start_time,7) AS st_time 
FROM Session_Info 
WHERE CourseName = 'Java' 
     AND Session_ID IN (SELECT Session_ID FROM sessions WHERE UserId = 'a') 
     AND NOT (right(start_time,7) BETWEEN right(start_time,7) AND right(end_time,7)) 

ИЛИ с использованием CTE

;WITH mySessionIDs (Session_ID) 
(
    SELECT Session_ID 
    FROM sessions 
    WHERE UserId = 'a' 
) 
SELECT DISTINCT right(si.start_time,7) AS st_time 
FROM Session_Info si 
     INNER JOIN mySessionIDs 
      ON si.Session_ID = mySessionIDs.Session_ID 
WHERE si.CourseName = 'Java' 
     AND NOT (right(start_time,7) BETWEEN right(start_time,7) AND right(end_time,7)) 
Смежные вопросы