2012-09-13 63 views
0

我想從我的查詢創建視圖,這種方式:從創建查詢視圖在MySQL - MySQL的don'a允許創建視圖

CREATE VIEW v_test 
(
OS_ID, 
OS_IMIE, 
KO_SYMBOL, 
OS_NAZWISKO, 
OS_SYGNATURA_APS, 
UP_DATA_WAZNOSCI_SZKOLENIA, 
UP_WAZNOSC_SZKOLENIA_DNI, 
UP_DATA_SZKOLENIA, 
KT_ID, 
KT_DZIEDZINA 
) 
AS 
SELECT 
a.OS_ID, 
a.OS_IMIE, 
a.KO_SYMBOL, 
a.OS_NAZWISKO, 
a.OS_SYGNATURA_APS, 
b.UP_DATA_WAZNOSCI_SZKOLENIA, 
b.UP_WAZNOSC_SZKOLENIA_DNI, 
b.UP_DATA_SZKOLENIA, 
b.KT_ID, 
b.KT_DZIEDZINA 

FROM (SELECT 
     v_ra_osoby_uprawnione.OS_ID, 
     v_ra_osoby_uprawnione.KO_SYMBOL, 
     v_ra_osoby_uprawnione.OS_NAZWISKO, 
     v_ra_osoby_uprawnione.OS_IMIE, 
     v_ra_osoby_uprawnione.OS_SYGNATURA_APS, 
     v_ra_osoby_uprawnione.OS_EMAIL, 
     v_ra_osoby_uprawnione.OS_UZYTKOWNIK 
     FROM v_ra_osoby_uprawnione AS v_ra_osoby_uprawnione) AS a INNER JOIN (SELECT 
     v_ra_uprawnienia.UP_ID, 
     v_ra_uprawnienia.OS_ID, 
     v_ra_uprawnienia.UP_NR_POSWIADCZENIA, 
     v_ra_uprawnienia.UP_DATA_WAZNOSCI_KLAUZULI, 
     v_ra_uprawnienia.UP_DATA_WYDANIA_POSWIADCZENIA, 
     v_ra_uprawnienia.UP_NR_ZASWIADCZENIA_O_SZKOLENIU, 
     v_ra_uprawnienia.UP_DATA_SZKOLENIA, 
     v_ra_uprawnienia.UP_DATA_WAZNOSCI_SZKOLENIA, 
     v_ra_uprawnienia.UP_DATA_WAZNOSCI_SZKOLENIA - CURDATE() as UP_WAZNOSC_SZKOLENIA_DNI, 
     v_ra_uprawnienia.KT_ETYKIETA, 
     v_ra_uprawnienia.KT_DZIEDZINA, 
     v_ra_uprawnienia.KT_ID, 
     v_ra_uprawnienia.SCISLE_TAJNE, 
     v_ra_uprawnienia.TAJNE, 
     v_ra_uprawnienia.POUFNE, 
     v_ra_uprawnienia.ZASTRZEZONE 
     FROM v_ra_uprawnienia AS v_ra_uprawnienia) AS b ON b.OS_ID = a.OS_ID 

但是MySQL不允許創建視圖,錯誤代碼是: SQL錯誤:視圖的SELECT包含FROM子句中的子查詢

我想避免爲每個子查詢創建視圖。在這種情況下,是否可以通過將我的查詢重寫爲沒有子查詢的等價物來創建單個視圖?

回答

1

Is tihs possible to create single view in this case by rewriting my query to equivalent without subqueries?

是:

CREATE VIEW v_test AS 
SELECT a.OS_ID, 
     a.OS_IMIE, 
     a.KO_SYMBOL, 
     a.OS_NAZWISKO, 
     a.OS_SYGNATURA_APS, 
     b.UP_DATA_WAZNOSCI_SZKOLENIA, 
     b.UP_DATA_WAZNOSCI_SZKOLENIA - CURDATE() AS UP_WAZNOSC_SZKOLENIA_DNI, 
     b.UP_DATA_SZKOLENIA, 
     b.KT_ID, 
     b.KT_DZIEDZINA 
FROM v_ra_osoby_uprawnione a JOIN v_ra_uprawnienia b USING (OS_ID) 
1

爲什麼你使用子查詢?

您的查詢與作品同樣只有加入

SELECT 
    a.OS_ID, 
    a.OS_IMIE, 
    a.KO_SYMBOL, 
    a.OS_NAZWISKO, 
    a.OS_SYGNATURA_APS, 
    b.UP_DATA_WAZNOSCI_SZKOLENIA, 
    b.UP_WAZNOSC_SZKOLENIA_DNI - CURDATE() as UP_WAZNOSC_SZKOLENIA_DNI 
    b.UP_DATA_SZKOLENIA, 
    b.KT_ID, 
    b.KT_DZIEDZINA 

    FROM v_ra_osoby_uprawnione AS a 
    INNER JOIN v_ra_uprawnienia AS b ON b.OS_ID = a.OS_ID 

嘗試創建與此

視圖