Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/06/2011, 09h39   #1
Invité de passage
 
Homme
Développeur Web
Inscription : juin 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 2
Points : 0
Points : 0
Par défaut Règle de recherche approfondie

Bonjour,

Je possède deux tables (prod et archives) ayant une structure identique, auxquelles j’accède grâce a une vue (vue_prod_archives) liant ces deux tables.

Je souhaiterais créer une règle sur la vue afin qu'un SELECT retourne d'abord les résultats de la table prod et si il ne trouve aucun résultat dans cette table, retourne les résultats de la table archives.

Est ce possible?
Si oui comment puis-je faire?
Syara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 13h51   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 532
Points : 7 532
Quelque chose comme ça ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT  *
FROM    production
WHERE   NOT EXISTS
        (   SELECT  1
            FROM    archive
        )
UNION ALL
SELECT  *
FROM    archive
WHERE   NOT EXISTS
        (   SELECT  1
            FROM    production
        )
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 14h24   #3
Invité de passage
 
Homme
Développeur Web
Inscription : juin 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 2
Points : 0
Points : 0
Pas exactement,
L'idée étant, pour alléger le temps de traitement des requêtes, de NE PAS aller chercher dans la table archives si quelque chose existe dans la table prod.

C'est la condition qui pose problème en fait.

Code :
1
2
3
4
5
6
7
8
9
 
IF ((SELECT * FROM prod) ne retourne rien)
{
SELECT * FROM archives;
}
ELSE
{
SELECT * FROM prod;
}
Je sais pas si c'est très clair... Ni même si c'est réalisable en SQL.
Syara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 10h44   #4
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 174
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 174
Points : 6 460
Points : 6 460
Faut faire une procédure dont voici un peu le principe


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
DECLARE compteur INTEGER;
 
......
 
SELECT COUNT(*) INTO compteur FROM prod;
 
IF (compteur > 0) THEN
 
SELECT * FROM archives;
 
ELSE
 
SELECT * FROM prod;
 
END IF
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2011, 22h21   #5
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 954
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 954
Points : 17 774
Points : 17 774
Plus exactement :

Code :
1
2
3
4
5
6
7
8
9
SELECT  *
FROM    production
UNION ALL
SELECT  *
FROM    archive
WHERE   NOT EXISTS
        (   SELECT  *
            FROM    production
        )
Ce sera sans doute plus rapide que la proc proposée par Maitre Pylos, car une requête est optimisable, pas du code itératif !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h49.


 
 
 
 
Partenaires

Hébergement Web