gpt4 book ai didi

MySql子查询返回多于1条记录

转载 作者:行者123 更新时间:2023-11-29 08:43:34 25 4
gpt4 key购买 nike

我有一个 MySQL 查询:

SELECT * 
FROM t1
WHERE ABS(TIMESTAMPDIFF(MINUTE, ts, (SELECT ts FROM t1 WHERE id=1 AND c1 < 5))) < 3
AND id=1

子查询返回 4 行,因此查询无法执行。我已将其更改为使用 join:

SELECT * 
FROM t1 a INNER JOIN t1 b
ON a.id=b.id AND b.id=1 AND c1<5
WHERE ABS(TIMESTAMP(MINUTE, a.ts, b.ts))<3;

我有两个问题:1.我转换(从子查询到连接)正确吗?2.无论如何要修复我的子查询吗?

谢谢。

最佳答案

1.它无效,因为您必须为所有字段添加前缀(可能是拼写错误),否则会出现歧义错误。以及其他拼写错误(TIMESTAMP 而不是 TIMESTAMPDIFF)

顺便说一句,在您的情况下,您可以将谓词条件放在 where 子句中,而不是放在联接中。

SELECT a.* 
FROM t1 a
INNER JOIN t1 b
ON a.id=b.id
WHERE a.id = 1
AND b.c1 < 5
AND ABS(TIMESTAMPDIFF(MINUTE, a.ts, b.ts))<3;

2.也许 EXISTS 子句可以完成这项工作。

SELECT a.*
FROM t1 a
WHERE a.id = 1
AND EXISTS
(SELECT NULL FROM t1 b
WHERE b.id = a.id
AND b.c1 < 5
AND TIMESTAMPDIFF(MINUTE, a.ts, b.ts) < 3)

关于MySql子查询返回多于1条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13117709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com