MySql分组返回不正确的结果

时间:2015-04-28 23:41:33

标签: mysql sql

好吧,我正在尝试做一些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)

如果您需要更多信息,请与我们联系

0 个答案:

没有答案