我有几张桌子
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俱乐部并使用左连接但我没有结果之后立即
谢谢
答案 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 JOIN
或RIGHT 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子句,如果不仔细使用,它们会对左连接造成严重破坏。