gpt4 book ai didi

mysql - friend 的 friend

转载 作者:行者123 更新时间:2023-11-29 10:07:21 26 4
gpt4 key购买 nike

这是我的 FRIENDS 表的示例

ID      FRIENDID
1001 1110
1001 1005
1002 1207
1002 1188
1005 1107
1005 1001

我正在尝试回答这些问题。

  • 特定人的好友数量。
  • 特定人的 friend 的 friend 数量。
  • 特定人的 friend 的 friend 的 friend 的数量。
  • 某个人的 friend 的 friend 的 friend 的 friend 的 friend 数量。

现在第一个很简单

SELECT count(ID) FROM FRIENDS
WHERE friendID = 1005;

第二个是我想出的

SELECT count(ID) FROM FRIENDS
WHERE friendID IN
(SELECT ID from FRIENDS where friendID = 1005) AND NOT ID = 1005;

第三个和第四个我很困惑并想出了这个,但它不起作用。不知道什么是正确的?我想我需要在其中使用 DISTINCT 以确保没有重复。

SELECT count(ID) FROM FRIENDS
WHERE friendID IN
((SELECT ID from FRIENDS where friendID = 1005) AND NOT ID = 1005
WHERE friendID IN
(SELECT ID from FRIENDS where friendID = 1005) AND NOT ID = 1005);

最佳答案

  • 某个人的好友数量。

这可以通过 count() 函数完成:

SELECT f1.id, count(DISTINCT f1.friendid) AS friends_cnt
FROM FRIENDS AS f1
WHERE f1.id = 1005;
  • 特定人的 friend 的 friend 数量。

这可以通过将表与其自身连接来完成:

SELECT f1.id, count(DISTINCT f2.friendid) AS f_friends_cnt
FROM FRIENDS AS f1
JOIN FRIENDS AS f2 ON f2.id = f1.frienfid
AND f2.id != f1.id -- to avoid recursion
WHERE f1.id = 1005;
  • 某个人的 friend 的 friend 的 friend 的数量

将表与自身连接两次:

SELECT f1.id, count(DISTINCT f3.friendid) AS f_f_friends_cnt
FROM FRIENDS AS f1
JOIN FRIENDS AS f2 ON f2.id = f1.frienfid
AND f2.id != f1.id
JOIN FRIENDS AS f3 ON f3.id = f2.frienfid
AND f3.id != f1.id
AND f3.id != f2.id
WHERE f1.id = 1005;
  • 某个人的 friend 的 friend 的 friend 的 friend 的 friend 数量。

将表与自身连接三次:

SELECT f1.id, count(DISTINCT f4.friendid) AS f_f_f_friends_cnt
FROM FRIENDS AS f1
JOIN FRIENDS AS f2 ON f2.id = f1.frienfid
AND f2.id != f1.id
JOIN FRIENDS AS f3 ON f3.id = f2.frienfid
AND f3.id != f1.id
AND f3.id != f2.id
JOIN FRIENDS AS f4 ON f4.id = f3.frienfid
AND f4.id != f1.id
AND f4.id != f2.id
AND f4.id != f3.id
WHERE f1.id = 1005;

关于mysql - friend 的 friend ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51682323/

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