2014-03-25 48 views
0

在MySQL的结果,我已经定义了一个视图上的两个表如下:记录不会出现在视图中尚未出现在查询视图

delimiter $$ 

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost`<br/> 
SQL SECURITY DEFINER VIEW `test`.`viewinschrijvingen` AS<br/> 
select `i`.`student` AS `student`,<br/> 
`i`.`opleidingscode` AS `opleidingscode`,<br/> 
`i`.`inschrijvingsvorm` AS `inschrijvingsvorm`,<br/> 
`i`.`brin` AS `brin`,<br/> 
`i`.`brinvolgnummer` AS `brinvolgnummer`,<br/> 
`o`.`onderwijsvorm` AS `onderwijsvorm`,<br/> 
`o`.`opleidingniveau` AS `opleidingniveau`,<br/> 
`o`.`naamopleidingkort` AS `naamopleidingkort`,<br/> 
`o`.`instelling` AS `instelling`,<br/> 
`o`.`studielast` AS `studielast`,<br/> 
date_format(max(str_to_date(`i`.`datuminschrijving`,'%Y-%m-%d')),'%Y-%m-%d') AS `datuminschrijving`,<br/> 
`o`.`gemeentenaam` AS `gemeentenaam` from<br/> 
(`test`.`inschrijvingen` `i` left outer join `test`.`opleidingen` `o`<br/> 
on((`i`.`opleidingscode` = `o`.`opleidingscode`)))<br/> 
group by `i`.`opleidingscode`,`i`.`brin`,`i`.`brinvolgnummer`$$<br/> 

当我查询这个视图的信息在特定学生:

SELECT * FROM test.viewinschrijvingen WHERE学生= '310018717'

结果是空的(没有记录返回)。当我浏览视图中的记录时,学生310018717(显然)没有记录。

然而,当我执行查询我用来创建直接的观点:

select `i`.`student` AS `student`,<br/> 
`i`.`opleidingscode` AS `opleidingscode`,<br/> 
`i`.`inschrijvingsvorm` AS `inschrijvingsvorm`,<br/> 
`i`.`brin` AS `brin`,<br/> 
`i`.`brinvolgnummer` AS `brinvolgnummer`,<br/> 
`o`.`onderwijsvorm` AS `onderwijsvorm`,<br/> 
`o`.`opleidingniveau` AS `opleidingniveau`,<br/> 
`o`.`naamopleidingkort` AS `naamopleidingkort`,<br/> 
`o`.`instelling` AS `instelling`,<br/> 
`o`.`studielast` AS `studielast`,<br/> 
date_format(max(str_to_date(`i`.`datuminschrijving`,'%Y-%m-%d')),'%Y-%m-%d') AS `datuminschrijving`,<br/> 
`o`.`gemeentenaam` AS `gemeentenaam` from<br/> 
(`test`.`inschrijvingen` `i` left outer join `test`.`opleidingen` `o` 
on((`i`.`opleidingscode` = `o`.`opleidingscode`)))<br/> 
WHERE student = '310018717'<br/> 
group by `i`.`opleidingscode`,`i`.`brin`,`i`.`brinvolgnummer`<br/> 

我得到一个结果(1分的记录,这是结果我的预期)。任何人都可以帮助我找到造成这种行为的原因吗?

+0

这些查询是不一样的。要手动运行相同的查询,请执行'SELECT * FROM(viewQueryHere)WHERE student = 310018717'。它应该提供与视图相同的输出。 –

回答

0

它可能与您使用MySQL的GROUP BY扩展名和ANSI GROUP BY格式有关。 MySQL不要求您在每个不是聚合函数的列上进行分组。对于没有进行分组的列,MySQL可以为列选择任何想要的值。在你的情况下,你没有使用学生字段进行分组,因此它可能不会选择你正在搜索的值。

您可能想尝试使用ANSI GROUP BY的这个查询,看看你是否得到你想要的结果。

delimiter $$ 

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` 
SQL SECURITY DEFINER VIEW `test`.`viewinschrijvingen` AS 
select 
    `i`.`student` AS `student`, 
    `i`.`opleidingscode` AS `opleidingscode`, 
    `i`.`inschrijvingsvorm` AS `inschrijvingsvorm`, 
    `i`.`brin` AS `brin`, 
    `i`.`brinvolgnummer` AS `brinvolgnummer`, 
    `o`.`onderwijsvorm` AS `onderwijsvorm`, 
    `o`.`opleidingniveau` AS `opleidingniveau`, 
    `o`.`naamopleidingkort` AS `naamopleidingkort`, 
    `o`.`instelling` AS `instelling`, 
    `o`.`studielast` AS `studielast`, 
    date_format(max(str_to_date(`i`.`datuminschrijving`,'%Y-%m-%d')),'%Y-%m-%d') AS `datuminschrijving`, 
    `o`.`gemeentenaam` AS `gemeentenaam` 
from `test`.`inschrijvingen` `i` 
left outer join `test`.`opleidingen` `o` 
    on `i`.`opleidingscode` = `o`.`opleidingscode` 
group by 
    `i`.`student`, 
    `i`.`opleidingscode`, 
    `i`.`inschrijvingsvorm`, 
    `i`.`brin` AS `brin`, 
    `i`.`brinvolgnummer`, 
    `o`.`onderwijsvorm`, 
    `o`.`opleidingniveau`, 
    `o`.`naamopleidingkort`, 
    `o`.`instelling`, 
    `o`.`studielast`, 
    `o`.`gemeentenaam`$$ 
+0

我使用你的建议重新创建了视图,现在它似乎很完美。非常感谢您的快速回答。 – Bas