首页 > 解决方案 > 如何在SQL中比较三个相关表中的两个相关列值

问题描述

我有三个表:学生、朋友和包。学生包含两列:ID 和名称。Friends 包含两列:ID 和 Friend_ID(唯一最好朋友的 ID)。软件包包含两列:ID 和 Salary(提供的薪水为每月数千美元)

我必须编写一个查询来输出那些最好的朋友得到比他们更高薪水的学生的名字。名字必须按照提供给最好朋友的薪水来排序。保证没有两个学生获得相同的薪水。

这是我的桌子: 学生桌 朋友桌 包桌

输出应该是这样的:输出表

标签: mysql

解决方案


首先使用他们的 id 加入所有 3 个表,而您将使用他们的朋友 id 获得每个名字。现在您已将朋友 ID 与包裹 ID 加入,同时您将获得朋友的薪水。最后过滤 FRIEND_SALARY>SALARY 。我在这里使用 oracle 语法。希望在mysql中也能正常工作。

select TMP2.NAME name 
from (SELECT TMP1.NAME,
       PP.ID,
       TMP1.SALARY salary,
       TMP1.FRIEND_ID,
       PP.SALARY friend_salary
  FROM packages pp,
       (SELECT *
          FROM students s, friends f, packages p
         WHERE S.ID = F.ID 
         AND S.ID = P.ID) tmp1
 WHERE PP.ID = TMP1.FRIEND_ID) tmp2
 where TMP2.FRIEND_SALARY>TMP2.SALARY

推荐阅读