leetcode 1623 三人国家代表队(postgresql)

需求

表: SchoolA

±--------------±--------+
| Column Name | Type |
±--------------±--------+
| student_id | int |
| student_name | varchar |
±--------------±--------+
student_id 是表的主键
表中的每一行包含了学校A中每一个学生的名字和ID
所有student_name在表中都是独一无二的

表: SchoolB

±--------------±--------+
| Column Name | Type |
±--------------±--------+
| student_id | int |
| student_name | varchar |
±--------------±--------+
student_id 是表的主键
表中的每一行包含了学校B中每一个学生的名字和ID
所有student_name在表中都是独一无二的

表: SchoolC

±--------------±--------+
| Column Name | Type |
±--------------±--------+
| student_id | int |
| student_name | varchar |
±--------------±--------+
student_id 是表的主键
表中的每一行包含了学校C中每一个学生的名字和ID
所有student_name在表中都是独一无二的

有一个国家只有三所学校,这个国家的每一个学生只会注册一所学校。

这个国家正在参加一个竞赛,他们希望从这三所学校中各选出一个学生来组建一支三人的代表队。

例如:

member_A是从 SchoolA中选出的
member_B是从 SchoolB中选出的
member_C是从 SchoolC中选出的
被选中的学生具有不同的名字和ID(没有任何两个学生拥有相同的名字、没有任何两个学生拥有相同的ID)
使用上述条件,编写SQL查询语句来找到所有可能的三人国家代表队组合。

查询结果接受任何顺序。

查询结果格式如下例。

示例 1:

输入:
SchoolA table:
±-----------±-------------+
| student_id | student_name |
±-----------±-------------+
| 1 | Alice |
| 2 | Bob |
±-----------±-------------+
SchoolB table:
±-----------±-------------+
| student_id | student_name |
±-----------±-------------+
| 3 | Tom |
±-----------±-------------+
SchoolC table:
±-----------±-------------+
| student_id | student_name |
±-----------±-------------+
| 3 | Tom |
| 2 | Jerry |
| 10 | Alice |
±-----------±-------------+
输出:
±---------±---------±---------+
| member_A | member_B | member_C |
±---------±---------±---------+
| Alice | Tom | Jerry |
| Bob | Tom | Alice |
±---------±---------±---------+
解释:
让我们看看有哪些可能的组合:

  • (Alice, Tom, Tom) --> 不适用,因为member_B(Tom)和member_C(Tom)有相同的名字和ID
  • (Alice, Tom, Jerry) --> 可能的组合
  • (Alice, Tom, Alice) --> 不适用,因为member_A和member_C有相同的名字
  • (Bob, Tom, Tom) --> 不适用,因为member_B和member_C有相同的名字和ID
  • (Bob, Tom, Jerry) --> 不适用,因为member_A和member_C有相同的ID
  • (Bob, Tom, Alice) --> 可能的组合.

输入

在这里插入图片描述

输出

with t1 as (
select a.student_name as member_A,b.student_name as member_B,c.student_name as member_C,
a.student_id as id_a,b.student_id as id_b,c.student_id as id_c
from schoola a
    inner join schoolb b on 1=1
inner join schoolc c on 1=1
)
select member_A,member_B,member_C
from t1
where member_A !=member_B and member_A!=member_C and member_B!=member_C
and id_a!=id_b and id_a!=id_c and id_b!=id_c

在这里插入图片描述

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值