【问题标题】:MySQL Operand should contain 2 column(s) errorMySQL 操作数应包含 2 列错误
【发布时间】:2017-07-11 13:47:40
【问题描述】:

以下 SQL 查询出现错误。我几乎可以肯定它是最后一行,但我不知道如何正确构建它。

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:操作数应包含 2 列

【问题讨论】:

  • 您得到的确切错误是什么?
  • java.sql.SQLException: 操作数应包含 2 列
  • 编辑问题并将其添加到问题中
  • 刚刚做了 - 它也在标题中。
  • 你应该尝试在这里使用JOINs 而不是所有这些子查询。

标签: mysql sql


【解决方案1】:

我认为您正在寻找类似的查询:

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`)

参考文献

【讨论】:

    【解决方案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%') 
    

    因为您不能 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)
    

    【讨论】:

    • 我试图将查询表述为“选择所有具有此 CourseID 的类。然后,如果这些类中的任何一个对应于其各自列中的值 '%M%' Days,不要显示 Start TimeEnd Time 介于 800 和 1500 之间的那些。显示所有其他结果。”
    • 我很难理解正确的措辞。
    • 是的,我明白了。像这样表述它怎么样:“选择所有具有此 CourseID 的类,它们的 'Days' 对应于 '%M%' 的值,并且它们的 End-Time 在 800 之前或它们的 Start-Time 在 1500 之后” .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2012-03-31
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多