首页 > 解决方案 > SQL - MariaDB 加入问题

问题描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

大家好,我正在处理一些简单的查询(我是菜鸟),并认为我会在这里停下来获得一些有根据的建议。我发布了一个链接,指向我为团队中的父母和球员制作的两张桌子。

我正在尝试编写一个查询,该查询返回父母双方都已注册到系统中的学生。所以它应该显示学生和父母双方。我可以为每个玩家和家长获得 INNER JOIN,但似乎无法将其归结为每个学生 > 1 或 = 2 的家长。

我尝试过使用 Distinct 子句,但也无法使其正常工作。任何帮助都会非常感谢您!

标签: mysql

解决方案


用于GROUP_CONCAT()让父母双方都得到结果。你需要GROUP BY pl_id为每个玩家排好队。

SELECT pl.pl_fname, pl.pl_lname, pl.pl_id,
    GROUP_CONCAT(pa.pa_fname, ' ', pa.pa_lname, ', ', pa.pa_id, ' ', pa.pa_address SEPARATOR '; ') AS parents
FROM Player AS pl
JOIN Parent AS pa ON pl.pl_lname = pa.pl_lname
GROUP BY pl.pl_id
HAVING COUNT(*) > 1

或者,如果您希望每个父级位于单独的行中,请加入一个计算父级数量的查询。

SELECT pl.pl_fname, pl.pl_lname, pl.pl_id, pa.pa_fname, pa.pa_lname, pa.pa_id, pa.pa_address 
FROM Player AS pl
JOIN Parent AS pa ON pl.pl_lname = pa.pl_lname
JOIN (SELECT pa_lname FROM parent GROUP BY pa_lname HAVING COUNT(*) > 1) AS pa1
    ON pl.pl_lname = pa1.pa_lname

推荐阅读