gpt4 book ai didi

join - SQL 放置加入学生、 friend 、包

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

问题:

  • 您将获得三个表:学生、 friend 和包裹。

  • 学生包含两列:ID 和姓名。

  • Friends 包含两列:ID 和 Friend_ID(唯一最好 friend 的 ID)。
  • 套餐包含两列:ID 和薪水(提供的薪水以每月数千美元为单位)。

编写一个查询来输出那些最好的 friend 的薪水比他们高的学生的姓名。名字必须按照提供给最好的 friend 的工资金额排序。保证没有两个学生获得相同的薪资。

代码:

这是我想出的代码,但它不会产生正确的结果。谁能告诉我为什么?

select TableA.name 
from
(select s.id,s.name,p.salary from students s inner join packages p on s.id=p.id) TableA,
(select f.id,f.friend_id, p2.salary from friends f inner join packages p2 on f.friend_id=p2.id) TableB
where TableA.id=TableB.id And TableA.salary>TableB.salary
order by TableB.salary desc;

最佳答案

我认为在您的查询中您写了 AND TableA.salary < TableB.salary而不是AND TableA.salary > TableB.salary 。此外,我认为您的查询可以以更综合的方式编写。在 MSSQL 上(但它也适用于 MYSQL,因为查询非常基本),您可以尝试使用这个:

SELECT s.id
,s.NAME
,p.salary
, f.friend_id, p2.salary as friend_salary
FROM students s
INNER JOIN packages p ON s.id = p.id
LEFT JOIN friends f ON f.id = s.id
LEFT JOIN packages p2 ON f.friend_id = p2.id
WHERE p.salary <= p2.salary
ORDER BY s.id;

输出:

    id  NAME    salary  friend_id   friend_salary
1 John 1000 2 1200
3 Pete 800 1 1000

示例数据:

CREATE TABLE students (id int, NAME VARCHAR(30));
CREATE TABLE packages (id int, salary INT);
CREATE TABLE friends (id int, friend_id INT);
INSERT INTO students values (1,'John');
INSERT INTO students values (2,'Arthur');
INSERT INTO students values (3,'Pete');

INSERT INTO packages values (1,1000);
INSERT INTO packages values (2,1200);
INSERT INTO packages values (3,800);

INSERT INTO friends values (1,2);
INSERT INTO friends values (2,3);
INSERT INTO friends values (3,1);

关于join - SQL 放置加入学生、 friend 、包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45796639/

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