2014-03-25 2 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/> 

나는 특정 학생에 대한 자세한 내용은이 뷰를 쿼리 할 때 : test.viewinschrijvingen FROM

SELECT * 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은 집계 함수가 아닌 모든 컬럼을 그룹화 할 필요가 없다. GROUPING이 아닌 컬럼의 경우, 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

관련 문제