Requêtes Sql

Résolu/Fermé
jihen_badreddine Messages postés 14 Date d'inscription vendredi 24 juin 2016 Statut Membre Dernière intervention 10 février 2018 - 18 août 2017 à 08:17
jihen_badreddine Messages postés 14 Date d'inscription vendredi 24 juin 2016 Statut Membre Dernière intervention 10 février 2018 - 19 août 2017 à 00:05
Bonjour ;

j'ai des requêtes et je veut créer les vues concernant ces requêtes, une parmi ceux :

select s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
from part, supplier, partsupp, nation, region where p_partkey = ps_partkey and s_suppkey = ps_suppkey and p_size = 1 and p_type like '%NICKEL' and s_nationkey = n_nationkey and n_regionkey = r_regionkey and r_name = 'AMERICA' and ps_supplycost = ( select min(ps_supplycost) from partsupp, supplier, nation, region where p_partkey = ps_partkey and s_suppkey = ps_suppkey and s_nationkey = n_nationkey and n_regionkey = r_regionkey and r_name = 'AMERICA' ) order by s_acctbal desc, n_name, s_name, p_partkey;


et leurs vues :

 V1 :Q2_Project1

Create view Q2_Project1 As select s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment from part, supplier, partsupp, nation, region order by s_acctbal desc, n_name, s_name, p_partkey;


SELECT s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment FROM Q2_Project1 ;

V2 :Q2_Join(P_PS)


Create view Q2_Join(P_PS) As select p_partkey , ps_partkey from part, partsupp where p_partkey = ps_partkey ;

select * from Q2_Join(P_PS) ;



V3 :Q2_Join(S;PS)


Create view Q2_Join(S_PS) As select * from supplier, partsupp where s_suppkey = ps_suppkey ;

select * from Q2_Join(S_PS) ;


V4 :Q2_Filter1


Create view Q2_Filter1 As select * from part where p_size = 1 ;

select * from Q2_Filter1 ;

V5 :Q2_Filter2


Create view Q2_Filter2 As select * from part where p_type like '%NICKEL' ;

select * from Q2_Filter2 ;

V6 :Q2_Join(S_N)


Create view Q2_Join(S_N) As select * from supplier, nation where s_nationkey = n_nationkey ;

select * from Q2_Join(S_N) ;


V7 :Q2_Join(N_R)

Create view Q2_Join(N_R) As select * from supplier, nation where n_regionkey = r_regionkey;

select * from Q2_Join(N_R) ;


V8 :Q2_Filter3


Create view Q2_Filter3 As select * from region where r_name = 'AMERICA' ;

select * from Q2_Filter3 ;

V9 :Q2_Project2

Create view Q2_Project2 As select min(ps_supplycost) from partsupp, supplier, nation, region ;

SELECT min(ps_supplycost) FROM Q2_Project2;


V10 : Q2_Filter4


Create view Q2_Filter4 As select * from partsupp where ps_supplycost = Q2_Project2 ;

select * from Q2_Filter4 ;



lors de l’exécution des vues contenant les jointures j'ai cette erreur : ERROR 1353 (HY000): View's SELECT and view's field list have different column counts

merci de m'aider

1 réponse

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié le 18 août 2017 à 10:20
Bonjour,

Quand tu appelles tes vues « Q2_Join(P_PS) », ce qui est entre parenthèses, tu voudrais que ça fasse partie du nom de la vue ?
Parce que pour SQL, dans la définition de la vue, c'est comme si tu disais « je veux créer une vue qui s'appelle Q2_Join ayant une seule colonne nommée P_PS »
Du coup, quand tu écris :
Create view Q2_Join(P_PS) As select p_partkey , ps_partkey from part, partsupp where  p_partkey = ps_partkey ;

SQL te répond : « Tu me dis de créer une vue Q2_Join avec une colonne nommée P_PS, mais après tu me donnes deux colonnes. »
D'où ton message d'erreur.
D'ailleurs au passage, pour lui toutes tes vues Q2_Join ont donc le même nom.

Je te suggère plutôt d'appeler tes vues Q2_Join_P_PS, etc.

Xavier

(PS : Au passage, dans ta vue P_PS, les deux colonnes auront toujours la même valeur, tu peux n'en garder qu'une seule, et du coup cette vue n'a pas beaucoup d'intérêt...)
0
jihen_badreddine Messages postés 14 Date d'inscription vendredi 24 juin 2016 Statut Membre Dernière intervention 10 février 2018
19 août 2017 à 00:05
Bonsoir;

Oui je désigne par Q2_Join(P_PS) le nom de ma vue.

Merci bien.
0