子查询中出现条件问题
我不知道如何更好地命名或说出这些,这会导致我的搜索出现偏差。子查询中出现条件问题
我有这个声明,它的工作原理。
SELECT username
, ip
FROM database.users
WHERE ip = (SELECT ip
FROM database.users_chat_history
WHERE username = ?
limit 1);
但是,我需要这样的事情,这是不允许的:
SELECT username
, ip
FROM database.users
WHERE ip = (SELECT ip
, posted_at
FROM database.users_chat_history
WHERE username = ?
group
by posted_at desc
limit 1);
Error: ER_OPERAND_COLUMNS: Operand should contain 1 column(s)
原因是是我需要它这样做搜索时抢最新/最近期的行,并与第一个,这不是这样做,这是造成问题。第二个查询,我只需要该语句的ip工作,但我需要它通过posted_at降序分组,因此它抓住了最新的职位。
我想你应该有顺序重新 “分组依据” BY子句。请看下图:
SELECT username, ip FROM database.users WHERE ip = (SELECT ip FROM database.users_chat_history WHERE username = ? ORDER BY posted_at desc limit 1);
谢谢,这回答了。 –
很高兴帮助。 – Amila
我愿意为子查询做这样的事情:
SELECT ip FROM database.users_chat_history WHERE username = ? ORDER BY posted_at ASC LIMIT 1;
未经检验,但应返回IP只(一列),而仅有一条记录(ASC适应/ DESC)相应到你要找的东西
这也适用(显然,是相同的代码),只是不完整的完整查询,这就是为什么我选择了其他答案作为解决我的问题的一个,只是在某些人在未来的搜索和出现这个。感谢您的帮助,我很感激! –
你没有使用聚合函数..所以你为什么在select中使用group by?尝试解释你的目标是什么。最终用适当的数据样本更新你的问题和预期的结果 – scaisEdge
order by posting_at desc将给你最新的记录 –
更新了样本,但有人回答了它在下面的工作。 –