从 mysql 中的查询创建视图 - mysql 不允许创建视图
Posted
技术标签:
【中文标题】从 mysql 中的查询创建视图 - mysql 不允许创建视图【英文标题】:Creating view from query in mysql - mysql don'a allow to create view 【发布时间】:2012-09-13 12:16:35 【问题描述】:我正在尝试从我的查询中创建视图,这样:
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】:在这种情况下,是否可以通过将我的查询重写为没有子查询的等价物来创建单个视图?
是的:
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)
【讨论】:
【参考方案2】:为什么要使用子查询?
您的查询仅与联接同样有效
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
尝试用这个创建视图
【讨论】:
以上是关于从 mysql 中的查询创建视图 - mysql 不允许创建视图的主要内容,如果未能解决你的问题,请参考以下文章