2014-03-25 50 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