gpt4 book ai didi

sql - "subquery returns more than 1 row"错误。

转载 作者:行者123 更新时间:2023-12-04 20:17:32 27 4
gpt4 key购买 nike

我是网络编程的新手,我正在尝试制作一个 Twitter 克隆。此时,我有 3 个表:

users (id, name)

  • id 是自动生成的id
  • 用户名

tweets (id, content, user_id)

  • id 是自动生成的id
  • 内容是推文的正文
  • user_id 是发帖用户的 id

followers (id, user_id, following_id)

  • id 是自动生成的id
  • user_id 是执行以下操作的用户
  • following_id 是被关注的用户

因此,作为 sql 的新手,我正在尝试构建一个 SQL 语句,该语句将返回当前登录用户及其关注的每个人的推文。

我尝试使用此语句,它有时有效,但有时,我收到一条错误消息,提示“子查询返回多于 1 行”。这是声明:

SELECT * FROM tweets 
WHERE user_id IN
((SELECT following_id FROM followers
WHERE user_id = 1),1) ORDER BY date DESC
  • 我这里以1为例,就是当前登录用户的id。

我对这个声明没有任何运气;任何帮助将不胜感激!谢谢。

最佳答案

在一条评论中,您问使用子查询或联合通常更好吗。不幸的是,没有简单的答案,只有一些信息。


如果 lsit 很大,某些 SQL 变体在优化 IN 子句时会出现问题,并且可能在以下任何方面表现得更好......

SELECT * FROM tweets
INNER JOIN followers ON tweets.user_id = followers.following_id
WHERE followers.user_id = 1

UNION ALL

SELECT * FROM tweets
WHERE user_id = 1

或者...

SELECT
*
FROM
tweets
INNER JOIN
(SELECT following_id FROM followers WHERE user_id = 1 UNION SELECT 1) AS followers
ON tweets.user_id = followers.following_id

或者...

SELECT
*
FROM
tweets
WHERE
EXISTS (SELECT * FROM followers WHERE following_id = tweets.user_id and user_id = 1)
OR user_id = 1

有很多很多选择...


某些类型的 SQL 努力优化 OR 条件,并最终检查 tweets 表中的每条记录而不是使用 INDEX。这将使 UNION 选项更受欢迎,因为查询的每一半都将受益于 user_id 字段上的索引。

但是您实际上可以从您的代码中完全重构这个极端情况:让每个用户都成为他们自己的追随者。这意味着获取关注者的推文自然会包括用户自己。这是否在所有情况下都有意义取决于您的设计和其他功能要求。


简而言之,最好的办法是创建一些有代表性的数据并测试选项。但我现在不会真的担心它。只要将这些代码封装在一个地方,您就可以选择一个您最喜欢的代码。然后,当您对系统的其余部分进行了哈希处理,并且更加确信事情不会改变时,您可以返回并如有必要进行优化。

关于sql - "subquery returns more than 1 row"错误。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7658650/

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