【问题标题】:Operand should contain 1 column(s) if-clause操作数应包含 1 列 if 子句
【发布时间】:2019-02-23 17:39:21
【问题描述】:

我不明白为什么这个查询是错误的。我单独尝试了真假查询并且它有效,但是当我将它们放在 if 子句中时它没有。提前感谢您的帮助:)

SELECT 
IF ( 
    (SELECT useronline FROM wp_livechat ORDER BY id DESC LIMIT 1) = 1
    , 
    (SELECT *
     FROM wp_livechat
     WHERE id >= (SELECT id 
                  FROM wp_livechat
                  WHERE useronline = 0
                  ORDER BY id DESC
                  LIMIT 0, 1)
     AND id <= (SELECT id 
                FROM wp_livechat
                WHERE useronline = 1
                ORDER BY id DESC
                LIMIT 0, 1)
    ),
    (SELECT *
     FROM wp_livechat
     WHERE id >= (SELECT id 
                  FROM wp_livechat
                  WHERE useronline = 0
                  ORDER BY id DESC
                  LIMIT 1, 1)
     AND id <= (SELECT id 
                FROM wp_livechat
                WHERE useronline = 0
                ORDER BY id DESC
                LIMIT 0, 1)
    )
);

编辑:这是表格:https://ibb.co/huri6e

我想从最后一个 useronline = 0 到最前面的 useronline = 0 获取消息。如果最后一个条目是 useronline = 1,那么我想从最后一个 useronline = 1 到最后一个条目中检索消息useronline = 0 的条目。

【问题讨论】:

  • 你想在这个查询中实现什么?看起来很复杂。我相信这里使用了不止一列。但很难追踪
  • 在您定义列的 SELECT 子句中,只能有值。您在子查询中使用 SELECT *,这是不可能的。
  • 但是当我单独运行这个查询时,它可以工作: SELECT * FROM wp_livechat WHERE ID >= (SELECT ID FROM wp_livechat WHERE useronline = 0 ORDER BY id DESC LIMIT 1, 1) AND ID
  • 我编辑并缩进了您的查询。它有助于理解正在发生的事情,因为它更易于阅读和找出每个查询的开始和结束。至于您的最后一条评论,您可以将其添加到您的问题中,并适当缩进。 cmets 中的代码很难阅读,因为您无法对其进行格式化。见How to Askminimal reproducible example
  • 在编写这样的长查询之前学习一些 SQL 语法。你的语法甚至无效。

标签: mysql database if-statement select


【解决方案1】:

我通过这个查询得到了它。无论如何谢谢:)

SELECT *
FROM wp_livechat
WHERE ID > (
    SELECT IF ( 
    (SELECT useronline FROM wp_livechat ORDER BY ID DESC LIMIT 1) = 1,
        (SELECT ID 
        FROM wp_livechat
        WHERE useronline = 0
        ORDER BY id DESC LIMIT 0, 1)
    ,
        (SELECT ID 
        FROM wp_livechat
        WHERE useronline = 0
        ORDER BY id DESC LIMIT 1, 1)
    )
)
AND ID <= (SELECT ID FROM wp_livechat WHERE useronline = 1 ORDER BY ID DESC LIMIT 1);

【讨论】:

    猜你喜欢
    • 2018-12-16
    • 1970-01-01
    • 2023-03-29
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多