2017-02-21 61 views
0

我收到以下SQL查詢的錯誤。我幾乎肯定這是最後一行,但我無法弄清楚如何正確構建它。MySQL操作數應該包含2列錯誤

SELECT * FROM listfinal 
    WHERE (CourseID IN (SELECT CourseID FROM listfinal WHERE CourseID ='A E200')) 
    AND (SELECT `Start Time`,`End Time` FROM listfinal WHERE `Days` LIKE ('%M%')) IN ((`Start Time` < 800 OR `Start Time` >= 1500) AND (`End Time` < 800 OR `End Time` >= 1500)) 

錯誤:

java.sql.SQLException: Operand should contain 2 column(s)

+0

什麼是你正在得到的確切錯誤? – depperm

+0

java.sql.SQLException:操作數應包含2列 –

+0

編輯問題並將其添加到問題 – depperm

回答

0

我認爲你正在尋找一個類似的查詢:

SELECT * FROM listfinal T1 
    WHERE (T1.CourseID IN (SELECT T3.CourseID FROM listfinal T3 WHERE T3.CourseID ='A E200')) 
    AND EXISTS (SELECT 1 FROM listfinal T2 WHERE T2.`Days` LIKE ('%M%') AND 
       (T2.`Start Time` < 800 OR T2.`Start Time` >= 1500) AND 
       (T2.`End Time` < 800 OR T2.`End Time` >= 1500) AND 
        T1.`Start Time` = T2.`Start Time` AND 
        T1.`End Time` = T2.`End Time`) 

參考

0

所以,你有這樣的:

SELECT * FROM listfinal 
    WHERE (CourseID IN (SELECT CourseID 
          FROM listfinal 
         WHERE CourseID ='A E200')) 

到目前爲止,一切都很好。但後來這沒有任何意義:

 AND (SELECT `Start Time`,`End Time` 
      FROM listfinal 
      WHERE `Days` LIKE '%M%') 

,因爲你不能AND子查詢,這是沒有意義的,無論是:

IN ((`Start Time` < 800 OR `Start Time` >= 1500) 
    AND (`End Time` < 800 OR `End Time` >= 1500)) 

IN運營商接受作爲參數值的列表。你沒有給它一個值列表,你給它一個布爾表達式。你需要重新考慮這一點。我不知道你在做什麼,所以我不能確定你想做什麼,但你可能正在尋找這樣的東西:

AND (`Start Time` < 800 OR `Start Time` >= 1500) 
AND (`End Time` < 800 OR `End Time` >= 1500) 
+0

我試圖用短語查詢,基本上說,「選擇所有具有此CourseID的類。然後,如果這些類中的任何一個對應於其各自列」Days「中的值'%M%',不顯示「開始時間」或「結束時間」在800到1500之間的顯示。顯示所有其他結果。「 –

+0

我無法用正確的措辭包裹我的頭。 –

+0

是的,我明白了。如何這樣說:「選擇所有具有此CourseID的班級,其'Days'對應的值爲'%M%',且其結束時間在800之前或其開始時間在1500之後」 。 –

相關問題