好吧,我正在尝试做一些SQL魔术,但遗憾的是它没有按预期工作。我有以下查询:
select
`U`.`id` AS `user_id`,
`athm`.`academy_module_id` AS `module_id`,
`AHAT`.`academy_team_id` AS `team_id`,
(case
when
((`act`.`module_id` = `athm`.`academy_module_id`)
and (`act`.`team_id` = `athm`.`academy_team_id`))
then
1
else 0
end) AS `is_complete`
from
(((`user` `U`
join `user_has_academy_team` `AHAT` ON ((`AHAT`.`user_id` = `U`.`id`)))
join `academy_team_has_academy_module` `athm` ON ((`AHAT`.`academy_team_id` = `athm`.`academy_team_id`)))
left outer join `academy_attempt` `act` ON ((`act`.`module_id` = `athm`.`academy_module_id`)))
现在没有任何分组,这会返回以下结果:
user_id, module_id, team_id, is_complete
'1', '11', '30', '1'
'1', '11', '30', '1'
'1', '11', '30', '1'
'1', '11', '30', '1'
'1', '11', '30', '1'
'1', '11', '30', '1'
'1', '11', '30', '1'
'1', '11', '30', '1'
'1', '11', '30', '1'
'1', '12', '30', '1'
'1', '12', '30', '1'
'1', '12', '30', '1'
'1', '12', '30', '1'
'1', '5', '32', '0'
'1', '10', '32', '0'
'1', '12', '32', '0'
'1', '12', '32', '0'
'1', '12', '32', '0'
'1', '12', '32', '0'
'3', '5', '32', '0'
'3', '10', '32', '0'
'3', '12', '32', '0'
'3', '12', '32', '0'
'3', '12', '32', '0'
'3', '12', '32', '0'
'4', '5', '32', '0'
'4', '10', '32', '0'
'4', '12', '32', '0'
'4', '12', '32', '0'
'4', '12', '32', '0'
'4', '12', '32', '0'
让我在这里解释一下我的目标:
当我的用户在我的应用程序中使用所谓的模块时,我的academy_attempt
会添加一个尝试。但是,用户可以多次使用模块,即向academy_attempt
表添加更多行。 (你可以看到用户1多次使用了一些模块)。
我的目标是找出哪些模块已经采用以及哪些模块没有采用。
可悲的是,当我在academy_module_id
上分组时,我得到以下结果:
user_id, module_id, team_id, is_complete
'1', '5', '32', '0'
'1', '10', '32', '0'
'1', '11', '30', '1'
'1', '12', '30', '1'
我猜这是因为LEFT OUTER JOIN
,因为其他用户在academy_attempt
中没有记录,结果将不会显示。
我的问题是,使用NULL数据时是否有解决方法?
以下是我的表格结构:
Table: user_has_academy_team
Columns:
user_id int(11) PK
academy_team_id int(11) PK
Table: academy_team_has_academy_module
Columns:
academy_team_id int(11) PK
academy_id int(11) PK
academy_module_id int(11) PK
Table: academy_attempt
Columns:
id int(11) AI PK
user_id int(11)
academy_id int(11)
module_id int(11)
module_type_id int(11)
team_id int(11)
score int(11)
medal_id int(11) PK
timestamp datetime
possible_correct int(11)
user_correct int(11)
Table: user
Columns:
id int(11) AI PK
username varchar(100)
password varchar(100)
is_active int(11)
user_type_id int(11)
token varchar(445)
organization_id int(11)
title_id int(11)
image_path varchar(100)
division_id int(11)
如果您需要更多信息,请与我们联系