gpt4 book ai didi

sql - 选择可以包含 2 列值的数据列表

转载 作者:行者123 更新时间:2023-11-29 13:12:14 25 4
gpt4 key购买 nike

我有一个好友请求表,其中包含两个用户(接收者和发送者)之间的好友请求数据以及好友请求状态(已接受、已拒绝):

enter image description here

我想检索 ID 为 1 的用户的 friend ,其中包括 2、3、4,如果可能的话,按姓名顺序检索他们。

我所说的 friend 是指(用户例如 1 是另一个用户例如 2 的发送者或接收者,并且 friendrequeststatus 的值为 ACCEPETED)。我所说的 friend 是指用户的所有列,例如 1,无论是作为收件人还是发件人,都具有已接受的 friend 请求状态。

我试过了`

 select request.*
from friendrequest request
where 1 in (request.recipient, request.sender)

enter image description here

最佳答案

设置:

CREATE TABLE t (id INTEGER, status TEXT, recipient INTEGER, sender INTEGER);

INSERT INTO t
VALUES
(1, 'ACCEPTED', 2, 1),
(2, 'ACCEPTED', 3, 1),
(3, 'ACCEPTED', 1, 4),
(4, 'REJECTED', 5, 1),
(5, 'REJECTED', 1, 5),
(6, 'ACCEPTED', 6, 7),
(7, 'ACCEPTED', 1, 2);

查询:

SELECT DISTINCT CASE sender WHEN 1 THEN recipient ELSE sender END AS friends
FROM t
WHERE 1 IN (recipient, sender)
AND status = 'ACCEPTED'
ORDER BY 1

结果:

| friends |
| ------- |
| 2 |
| 3 |
| 4 |

https://www.db-fiddle.com/f/sfbFeXCvWkoSagJEipfxSr/0

所以首先我添加了一些数据来证明只使用了正确的数据。查询检查收件人/发件人是否为 1,就像您在查询中所做的那样。它还会检查“ACCEPTED”的状态字段,然后使用不是 1 的值(CASE 语句)创建一个单独的列,以形成正确的列的 friend 值。然后它执行一个 DISTINCT 以确保同一个人不会被报告两次(如果他们是一个记录中的发件人和另一个记录中的收件人……如果可能的话)。它按生成的列排序。

关于sql - 选择可以包含 2 列值的数据列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53374054/

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