2016-10-20 2 views
1

MySql Créer vue:Mysql 5.6/5.7: View SELECT contient une sous-requête dans la clause FROM

CREATE VIEW Foo as 
select type from (select 8 as type UNION ALL select 9 as type) types; 

MySql 5.7.11 sur les fenêtres: travaux, mais mysql 5.6.25-0ubuntu0.15.04.1 (Ubuntu): ne fonctionne pas.

View's SELECT contains a subquery in the FROM clause 

Ceci est un changement de 5.6 à 5.7? J'ai essayé de mettre à niveau mysql à 5.7 sur Ubuntu, mais ce n'est pas disponible sur Ubuntu. Aucun conseil? Merci.

EDIT: L'exemple est un cas de test. Cas réel est de créer une vue qui fait un enregistrement de barre à deux enregistrements dans la vue:

CREATE VIEW Foo as 
    select types.type, bar.value from 
    (select 8 as type UNION ALL select 9 as type) types, Bar bar 

Répondre

1

Le problème est que vous faites une vue avec requête qui sélectionne une autre requête.

Vous devez simplement écrire une requête de sélection dans votre vue de manière différente.


Solution:

La requête:

select type from (select 8 as type UNION ALL select 9 as type) types; 

est identique:

select 8 as type UNION ALL select 9 as type 

afin de créer une vue:

CREATE VIEW Foo AS 
    select 8 as type UNION ALL select 9 as type; 
+0

Merci. une solution pour l'exemple réel vient d'être ajouté? – Dave

1

Oui, c'est un changement dans MySQL.

Les versions antérieures de MySQL n'autorisent pas les vues en ligne (ou les tables dérivées dans le langage MySQL) dans une définition de vue stockée.

En ce qui concerne les conseils ... il ne semble pas nécessaire d'avoir une vue en ligne dans la requête de vue. Au-delà, je remets en question le besoin de ... c'est-à-dire la raison pour laquelle une définition de vue stockée est nécessaire.