如果表有结果,请加入表

时间:2015-07-13 18:35:44

标签: mysql sql join

我有几张桌子

  1. 俱乐部 - >包含不同俱乐部的信息
  2. club-leagues - >包含俱乐部主办的不同联赛的信息
  3. 代码 - >包含用于使数据输入更容易的短手代码的描述
  4. club-leagues有一个字段,其中包含俱乐部的ID,以便与彼此建立联系。

    我有以下声明

    SELECT club.*, sport.name AS sport, code.description AS statusText,
        code1.description AS ageGroup, code2.description AS gender,
        leagues.name AS leagueName, leagues.ageGroup AS age, leagues.division,
        code3.description AS leagueGender, leagues.season
    FROM clubs as club
    JOIN sports AS sport ON sport.id = club.sport
    JOIN codes AS code ON club.status = code.code
    JOIN codes AS code1 ON code1.code = club.ageGroup
    JOIN codes AS code2 ON code2.code = club.gender
    JOIN `clubs-leagues` AS leagues ON leagues.clubId = club.id
    JOIN codes AS code3 ON leagues.gender = code3.code
    WHERE club.id=(:n)
    

    如果俱乐部有一个联赛,但是如果没有联赛(俱乐部联赛表)那么它就没有效果(我希望它显示俱乐部表的结果,即使俱乐部联赛中没有联赛)表)

    目前我已尝试移动"加入clubs-leagues作为联赛的联盟.clubId = club.id"在我宣布俱乐部AS俱乐部并使用左连接但我没有结果之后立即

    谢谢

3 个答案:

答案 0 :(得分:1)

如评论中所示,您需要在俱乐部和联赛中使用LEFT JOIN以获得所有俱乐部,无论其是否加入联盟。您的SQL可能如下所示:

SELECT club.*, sport.name AS sport, code.description AS statusText,
    code1.description AS ageGroup, code2.description AS gender,
    leagues.name AS leagueName, leagues.ageGroup AS age, leagues.division,
    code3.description AS leagueGender, leagues.season
FROM clubs as club
LEFT JOIN `clubs-leagues` AS leagues ON leagues.clubId = club.id
JOIN sports AS sport ON sport.id = club.sport
JOIN codes AS code ON club.status = code.code
JOIN codes AS code1 ON code1.code = club.ageGroup
JOIN codes AS code2 ON code2.code = club.gender
JOIN codes AS code3 ON leagues.gender = code3.code
WHERE club.id=(:n)

请注意,我还没有检查SQL的其余部分,由您决定是否正确。

答案 1 :(得分:0)

使用LEFT JOINRIGHT JOIN代替JOIN来包含left | right表中的所有值,即使右|左表没有匹配的行。

答案 2 :(得分:0)

SELECT *
FROM clubs as club
LEFT JOIN `clubs-leagues` AS leagues ON leagues.clubId = club.id
--LEFT JOIN sports AS sport ON sport.id = club.sport
--LEFT JOIN codes AS code ON club.status = code.code
--LEFT JOIN codes AS code1 ON code1.code = club.ageGroup
--LEFT JOIN codes AS code2 ON code2.code = club.gender
--LEFT JOIN codes AS code3 ON leagues.gender = code3.code

由于我不知道您拥有哪些数据或者是否存在隐藏的问题,我建议采用这种方法。运行上面的查询,当您在下一行中获得结果注释并在查看结果时优化查询,并且知道您正在获得所需的全部内容。然后,您可以限制select语句并添加where子句。   另外要注意Where子句,如果不仔细使用,它们会对左连接造成严重破坏。