Mysql 显示需求列表,包括已完成的需求
我在处理这个看似简单的select查询时遇到了问题 我有三张表,一张徽章表,一张要求表,还有一张表,显示哪些侦察兵完成了哪些要求。我希望能够输入徽章和童子军ID,并获得我输入的徽章的所有要求以及指定童子军已完成要求的完成日期的列表 这是我的桌子: 徽章桌Mysql 显示需求列表,包括已完成的需求,mysql,sql,select,Mysql,Sql,Select,我在处理这个看似简单的select查询时遇到了问题 我有三张表,一张徽章表,一张要求表,还有一张表,显示哪些侦察兵完成了哪些要求。我希望能够输入徽章和童子军ID,并获得我输入的徽章的所有要求以及指定童子军已完成要求的完成日期的列表 这是我的桌子: 徽章桌 __________________________ |id|badgeName |rank | -------------------------- |1 |First Aid |Navigator| |2 |Woods To
__________________________
|id|badgeName |rank |
--------------------------
|1 |First Aid |Navigator|
|2 |Woods Tools|Navigator|
|3 |Aquatics |Navigator|
|4 |Camping |Navigator|
--------------------------
需求表
____________________________________________________________________
id |badgeid|requirementnum|requirementstep|description |
---------------------------------------------------------------------
|1 |1 |11 |a |Requirement 11a First Aid|
|2 |1 |11 | |Requirement 11 First Aid |
|3 |1 |11 |b |Requirement 11b First Aid|
|4 |1 |11 |c |Requirement 11c First Aid|
|5 |1 |11 |d |Requirement 11d First Aid|
|6 |1 |11 |e |Requirement 11e First Aid|
|7 |1 |11 |f |Rquirement 11f First Aid |
|8 |1 |11 |g |Requirement 11g First Aid|
|9 |1 |1 | |Requirement 1 First Aid |
|10|1 |1 |a |Requirement 1a First Aid |
|11|1 |1 |b |Requirement 1b First Aid |
|12|1 |2 | |Requirement 2 First Aid |
|13|1 |2 |a |Requirement 2a First Aid |
|14|3 |1 | |Requirement 1 Aquatics |
|15|3 |2 | |Requirement 2 awuatics |
|16|3 |3 |a |Requirement 3a Aquatics |
|17|3 |3 |b |Requirement 3b Aquatics |
|18|4 |1 | |Requirement 1Camping |
|19|4 |2 |a |Requirement 2a Camping |
|20|4 |2 |b |Requirement 2b camping |
---------------------------------------------------------------------
________________________________________________
|id|requirementid|trailmanid|complete |comments|
-------------------------------------------------
|1 |1 |1 |2014-01-01|JO |
|2 |2 |1 |2014-01-01|JO |
|3 |3 |1 |2016-01-01|CS |
|4 |18 |4 |2016-01-01|CS |
|5 |19 |4 |2016-01-01|CS |
|6 |20 |4 |2014-02-10|JO |
|7 |18 |1 |2016-06-12|null |
|8 |14 |2 |null |null |
|9 |15 |2 |null |null |
-------------------------------------------------
列车员/需求表
____________________________________________________________________
id |badgeid|requirementnum|requirementstep|description |
---------------------------------------------------------------------
|1 |1 |11 |a |Requirement 11a First Aid|
|2 |1 |11 | |Requirement 11 First Aid |
|3 |1 |11 |b |Requirement 11b First Aid|
|4 |1 |11 |c |Requirement 11c First Aid|
|5 |1 |11 |d |Requirement 11d First Aid|
|6 |1 |11 |e |Requirement 11e First Aid|
|7 |1 |11 |f |Rquirement 11f First Aid |
|8 |1 |11 |g |Requirement 11g First Aid|
|9 |1 |1 | |Requirement 1 First Aid |
|10|1 |1 |a |Requirement 1a First Aid |
|11|1 |1 |b |Requirement 1b First Aid |
|12|1 |2 | |Requirement 2 First Aid |
|13|1 |2 |a |Requirement 2a First Aid |
|14|3 |1 | |Requirement 1 Aquatics |
|15|3 |2 | |Requirement 2 awuatics |
|16|3 |3 |a |Requirement 3a Aquatics |
|17|3 |3 |b |Requirement 3b Aquatics |
|18|4 |1 | |Requirement 1Camping |
|19|4 |2 |a |Requirement 2a Camping |
|20|4 |2 |b |Requirement 2b camping |
---------------------------------------------------------------------
________________________________________________
|id|requirementid|trailmanid|complete |comments|
-------------------------------------------------
|1 |1 |1 |2014-01-01|JO |
|2 |2 |1 |2014-01-01|JO |
|3 |3 |1 |2016-01-01|CS |
|4 |18 |4 |2016-01-01|CS |
|5 |19 |4 |2016-01-01|CS |
|6 |20 |4 |2014-02-10|JO |
|7 |18 |1 |2016-06-12|null |
|8 |14 |2 |null |null |
|9 |15 |2 |null |null |
-------------------------------------------------
因此,如果我试图通过trailmanid=1显示所有露营徽章要求和任何要求的完成日期,我是这样做的:
select badgename, requirementnum, requirementstep, description,firstname, complete
from badges inner join requirements on badges.id = requirements.badgeid
left join trailmenrequirements on requirements.[id] = trailmenrequirements.requirementid
left join trailmen on trailmenrequirements.[trailmanid] = trailmen.id
where (trailmanid = 1 or trailmanid is null)
and badgeid = 4
这并不能满足我的要求,它只会收回trailmanid=1已经完成的一项露营要求。如果我进行其他组合,比如寻找trailmanid=1的急救徽章,那么它似乎会收回正确的数据。我认为这与任何童子军是否完成了特定的要求有关
在花了太多时间在它和100的排列上之后,我想我会征集专家。有人能帮忙吗
上述查询的预期结果为:
+-----------+----------------+-----------------+------------------------+------------+------------+
| badgename | requirementnum | requirementstep | description | trailmanid | complete |
+-----------+----------------+-----------------+------------------------+------------+------------+
| Camping | 1 | null | Requirement 1 camping | 1 | 2016-06-12 |
+-----------+----------------+-----------------+------------------------+------------+------------+
| Camping | 2 | a | Requirement 2a Camping | | |
+-----------+----------------+-----------------+------------------------+------------+------------+
| Camping | 2 | b | Requirement 2b Camping | | |
+-----------+----------------+-----------------+------------------------+------------+------------+
我用trailmanid代替FirstName,因为我没有包含上面的trailman表请发布您的预期结果为什么使用
[trailmanid]
语法?这是针对SQL Server的,而不是MySQL。woods工具徽章很容易获得。我很惊讶我没有它,所以,这是标记为MySQL的,但你没有使用MySQL,是吗?我尝试了多个系统,所以我可能只是从错误的程序中复制了查询(我想可能是SQLite,我很绝望)。这个查询在MySQL上也不起作用(我复制了表、数据和它们之间的查询)。我还没有尝试过MSSQL,但我希望得到同样的结果。