2014-02-06 161 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 =「A」)如何將其存儲在一個變量?

+0

你得到什麼錯誤?此外,夫婦的評論 - 「之間」不是有效的語法;一般來說,你應該使用'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)) 
相關問題