我需要从数据库表中读取数据。 有两个表,一个是体育联赛表,其中包含联赛的详细信息,另一个表包含每个联赛中的所有球员。玩家可以参加任意数量的联赛。
示例数据如下所示。
LEAGUE_TEAM
_______________
ID NAME
____ ________
1 EPL
2 IPL
3 CPL
4 BPL
5 BBL
PLAYER_DETAILS
_______________________
LEAGUE_ID PLAYER_LAST_NAME PLAYER_FIRST_NAME
___________ ___________________ _________________
1 Silva Thiago
2 Silva Thiago
3 Silva Thiago
1 Lampard Frank
2 Lampard Frank
1 Caballero Willy
2 Caballero Willy
3 Caballero Willy
4 Caballero Willy
5 Caballero Willy
4 Mount Mason
输入数据是json格式的玩家姓名集合,其中包括last_name和first_name。使用提供的球员姓名列表,我应该确定这些球员属于哪个联赛。
例如:如果输入的详细信息是
1.
last_name first_name
__________ ___________
silva Thiago
Caballero Willy
sql 查询应该得到联赛 1,2 和 3 的详细信息,因为这两名球员同时参加 EPL、IPL 和 CPL 联赛。
2.
last_name first_name
__________ ___________
Lampard Frank
Caballero Willy
sql 查询应该得到联赛 1 和 2 的详细信息,因为这两名球员同时参加 EPL 和 IPL 联赛。
3.
last_name first_name
__________ ___________
Mount Mason
Caballero Willy
sql 查询应该得到联赛 4 的详细信息,因为这两名球员同时参加 BPL 联赛。
到目前为止我得到的只是简单的sql查询,
SELECT lt.* FROM LEAGUE_TEAM lt
INNER JOIN PLAYER_DETAILS pd ON pd.league_id = lt.id
WHERE pd.last_name = :last_name and pd.first_name = :first_name
使用此查询,
这是一个非常乏味的过程,我没有留下深刻的印象。只是想从社区获得帮助,如果有任何 SQL 查询可以用来获得预期的结果。 预先感谢您的所有支持和帮助。
环境:
Postgresql 16
Java 11 for programming
类似这样,HAVING中的条件:
SELECT id
, name
, array_agg(DISTINCT player_last_name ORDER BY player_last_name) -- to validate the output
FROM league_team
JOIN player_details ON league_team.id = player_details.league_id
WHERE (player_last_name = 'Silva' AND player_first_name = 'Thiago')
OR (player_last_name = 'Caballero' AND player_first_name = 'Willy')
GROUP BY id, name
HAVING count(*) = 2; -- 2 players