gpt4 book ai didi

具有两列的 MYSQL 子查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:48:31 26 4
gpt4 key购买 nike

我一直在尝试让子查询工作,但我认为它需要加入,但我是数据库的新手,很难理解它是如何工作的。

我需要根据连接中的三列从用户配置文件中收集行,我所拥有的不起作用的是这个。

SELECT * FROM userprofile WHERE user_id IN 
(SELECT connect.user_id, connect.connect_to_id FROM connect WHERE
(user_id = '1' OR connect_to_id = '1') AND is_connected = '1' );

因为第二个 SELECT 有两列列出了错误

#1241 - Operand should contain 1 column(s)

在第二个连接中只列出一列不会返回所有条目,只会返回第一个测试满足的条目。

这是否必须通过 JOIN 来完成,如果是的话如何做?我尝试的每个连接都会导致返回 userprofile 表中的所有条目。

感谢您的帮助。

*更新

我现在有两个查询。

SELECT u.* FROM userprofile u 
JOIN connect c ON (u.user_id = c.user_id OR u.user_id = c.connect_to_id) WHERE
((c.user_id = '1' OR c.connect_to_id = '1') AND c.is_connected = '1') AND u.user_id != '1'
GROUP BY u.id;

SELECT u.* FROM userprofile u WHERE u.user_id IN 
(SELECT connect.user_id FROM connect WHERE connect.connect_to_id = '1' AND connect.is_connected = '1'
UNION ALL
SELECT connect.connect_to_id FROM connect WHERE connect.user_id = '1' AND connect.is_connected = '1')

超过 10000 个调用使用 microtime 我有第二个使用 Sub Query 更快一点。

Join Query:4.6199560165405
Sub Query:4.0528790950775

然后我决定进行测试以了解原因,并发现 GROUP BY 命令大大降低了 JOIN 的速度。因此,删除 GROUP BY 后,我得到了这些数字。

Join Query:2.6410460472107
Sub Query:4.1510140895844

事实证明,我并不真正需要 GROUP BY,因为我正在检查 u.user_id != '1' 并且这停止了我遇到的相同问题。

那么问题是,使用 GROUP BY 是不是不受欢迎?

最佳答案

它可以通过join 或子查询来完成。通常与 MySQL 连接更有效,因为在许多情况下 MySQL 无法将索引与子查询一起使用。因此,在您的情况下,带有连接的查询将是:

SELECT u.*
FROM
userprofile u
JOIN connect c ON (u.user_id = c.user_id OR u.user_id = c.connect_to_id)
WHERE
(c.user_id = '1' OR c.connect_to_id = '1') AND
c.is_connected = '1'

关于具有两列的 MYSQL 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36993938/

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