2017-02-21 122 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之后” 。 –

相关问题