Mysql 记录未出现在视图中,但会出现在查询视图的结果中

Mysql 记录未出现在视图中,但会出现在查询视图的结果中,mysql,view,Mysql,View,在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 `ople

在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/>
分隔符$$
创建算法=未定义的定义器=`root`@`localhost`
SQL安全定义器视图'test'。'viewinschrijvingen'AS
选择'i'。'student'作为'student',
`i`.`opleidingscode`作为`opleidingscode`,
`i`.`inschrivingsform`作为`inschrivingsform`,
`i`.`brin`作为`brin`,
`i`.`brinvolgnummer`作为`brinvolgnummer`,
`o`.`onderwijsform`作为`onderwijsform`,
`o`.`opleidingniveau`作为`opleidingniveau`,
`o`.`naamopleidingkort`作为`naamopleidingkort`,
`o`.`instelling`作为`instelling`,
`o`.`studielast`作为`studielast`,
日期格式(最大值(str_to_date(`i`.`datuminschrijving`,'%Y-%m-%d')),'%Y-%m-%d')为`datuminschrijving`,
`o`.`geminetenaam`作为`geminetenaam`来自
(`test`.`inschrijvingen``i`左外连接`test`.`opleidingen``o`
on(`i`.`opleidingscode`=`o`.`opleidingscode`))
按'i`.'opleidingcode`、'i`.'brin`、'i`.'brinvolgnummer`$$分组
当我查询此视图以获取特定学生的信息时:

从test.viewinschrijvingen中选择*其中学生='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/>
选择'i'。'student'作为'student',
`i`.`opleidingscode`作为`opleidingscode`,
`i`.`inschrivingsform`作为`inschrivingsform`,
`i`.`brin`作为`brin`,
`i`.`brinvolgnummer`作为`brinvolgnummer`,
`o`.`onderwijsform`作为`onderwijsform`,
`o`.`opleidingniveau`作为`opleidingniveau`,
`o`.`naamopleidingkort`作为`naamopleidingkort`,
`o`.`instelling`作为`instelling`,
`o`.`studielast`作为`studielast`,
日期格式(最大值(str_to_date(`i`.`datuminschrijving`,'%Y-%m-%d')),'%Y-%m-%d')为`datuminschrijving`,
`o`.`geminetenaam`作为`geminetenaam`来自
(`test`.`inschrijvingen``i`左外连接`test`.`opleidingen``o` on(`i`.`opleidingscode`=`o`.`opleidingscode`))
其中学生='310018717'
按'i`.'opleidingcode`、'i`.'brin`、'i`.'brinvolgnummer`

我确实得到了一个结果(1条记录,这是我期望的结果)。有谁能帮我找到导致这种行为的原因吗?

这可能与您使用MySQL的分组扩展而不是ANSI的分组格式有关。MySQL不需要对不是聚合函数的每一列进行分组。对于没有分组的列,MySQL可以为该列选择它想要的任何值。在您的情况下,您没有使用student字段进行分组,因此它可能没有选择要搜索的值

您可能希望尝试此使用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`$$

这些查询是不同的。要手动运行相等查询,请执行
选择*FROM(viewQueryHere),其中student=310018717
。它应该提供与视图相同的输出。我使用您的建议重新创建了视图,现在它似乎工作得很好。非常感谢您的快速回答。