首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带条件的MySQL连接表

带条件的MySQL连接表
EN

Stack Overflow用户
提问于 2012-06-21 21:17:18
回答 2查看 166关注 0票数 1

我的SQL不能做到这一点,但我很确定对于SQL专家来说这很容易--我宁愿找出正确的查询,而不是把逻辑放到PHP脚本中……

所以:我有两个表,一个包含关于俱乐部的信息,一个特定的比赛,以及俱乐部有多少支球队参加了那场比赛。第二个表将条目划分为"divisions“

代码语言:javascript
复制
mysql> describe Entries;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| ClubId   | int(11) | NO   | PRI | NULL    |       |
| MatchId  | int(11) | NO   | PRI | NULL    |       |
| NumTeams | int(11) | NO   |     | NULL    |       |
+----------+---------+------+-----+---------+-------+
mysql> describe Divisions;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| MatchId  | int(11) | NO   | MUL | NULL    |       |
| ClubId   | int(11) | NO   | MUL | NULL    |       |
| Team     | int(11) | NO   |     | NULL    |       |
| Division | int(11) | NO   |     | NULL    |       |
+----------+---------+------+-----+---------+-------+

示例数据:

代码语言:javascript
复制
Entries:
1, 1, 1 (Club1, Match1, 1 team)
1, 3, 2 (Club1, Match3, 2 teams)

Divisions:
1, 1, 1, 1 (Club1, Match1, Team1 is in division 1)
1, 1, 2, 2 (Club1, Match1, Team2 is in division 2)
1, 2, 1, 1 (Club1, Match2, Team1 is in division 1)
1, 2, 2, 2 (Club1, Match2, Team2 is in division 2)
1, 3, 1, 1 (Club1, Match3, Team1 is in division 1)
1, 3, 2, 2 (Club1, Match3, Team2 is in division 2)

所需结果:

代码语言:javascript
复制
1, 1, 1 (Club 1, Match1, Team1)
1, 3, 1 (Club1, Match3, Team1)
1, 3, 2 (Club1, Match3, Team2)

- so not all the rows in Divisions are in the result.
  e.g, club1, match1, team2 isn't here because there
  is only one entry in match 1.

现在,随着俱乐部进入或退出球队,Entries.NumTeams可以上下浮动。当一个新的团队进入时,它会被放入第一组(就像它总是在一个组中一样)。当球队被删除时,他们在分区表中的条目不会被删除(分区是手动设置的,所以如果有人决定俱乐部X的第二支球队属于第二组,您希望保留该信息,即使俱乐部X还没有进入第二支球队)。

因此,要打印一个部门中的所有团队,我需要如下内容:

代码语言:javascript
复制
SELECT * FROM Divisions WHERE Divisions.Team <= Entries.NumTeams
    (for the Entries row with the matching match and club)

我试过这个:

代码语言:javascript
复制
SELECT Divisions.* from Entries LEFT JOIN Divisions ON 
    Divisions.MatchId = Entries.MatchId AND Divisions.ClubId = Entries.ClubId 
    WHERE Divisions.Team <= Entries.NumTeams

但我最终得到了重复的行。我也许可以通过使用SELECT DISTINCT来摆脱它们,但这让我认为我的查询一开始就是错误的。我还交换了左边和右边的表,但仍然有重复的表格。

明天将尝试提供的答案。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-21 21:25:30

使用DISTINCT将删除重复的行,您的查询看起来是正确的。

票数 2
EN

Stack Overflow用户

发布于 2012-06-21 21:20:49

在mysql中使用distinct

代码语言:javascript
复制
SELECT distinct Divisions.* from Entries LEFT JOIN Divisions ON 
    Divisions.MatchId = Entries.MatchId AND Divisions.ClubId = Entries.ClubId 
    WHERE Divisions.Team <= Entries.NumTeams
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11139056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档