[Postgresql] requete avec une subquery...

requete avec une subquery... [Postgresql] - SQL/NoSQL - Programmation

Marsh Posté le 21-03-2003 à 17:44:11    

lu
 
j essai de faire une requete sql sur postgresql avec une subquery
 
en gros je voudrai selectionner tous les hosts de la tables hosts dont le Hostname n'apparait pas dans la table lock
j ai essaye ca:
 
select "Host" from hosts where "Hostname" not in (select "Hostname" from lock where "Type" = 'Toto';);
 
et j obtiens cette erreur:
 
ERROR:  Unable to identify an operator '<>' for types 'character' and 'character varying'
        You will have to retype this query using an explicit cast
 
je pense qu il faudrait mettre le resultat de la subquery entre '', mais j y arrive po...
 
si quelqu un avais une idee ca serai super ;)
merci d avance pour votre aide.


Message édité par djtoz le 21-03-2003 à 17:44:57
Reply

Marsh Posté le 21-03-2003 à 17:44:11   

Reply

Marsh Posté le 21-03-2003 à 19:48:34    

djtoz a écrit :

lu
 
j essai de faire une requete sql sur postgresql avec une subquery
 
en gros je voudrai selectionner tous les hosts de la tables hosts dont le Hostname n'apparait pas dans la table lock
j ai essaye ca:
 
select "Host" from hosts where "Hostname" not in (select "Hostname" from lock where "Type" = 'Toto';);
 
et j obtiens cette erreur:
 
ERROR:  Unable to identify an operator '<>' for types 'character' and 'character varying'
        You will have to retype this query using an explicit cast
 
je pense qu il faudrait mettre le resultat de la subquery entre '', mais j y arrive po...
 
si quelqu un avais une idee ca serai super ;)
merci d avance pour votre aide.


 
 
select "Host" from hosts where CAST("Hostname"AS text) not in (select CAST("Hostname" AS text) from lock where "Type" = 'Toto';);
 
C'est qu'une idée.
 
edit : au risque de parraître lourd, t'a bien foutu un index sur les colones "Hostname" dans les tables hosts et lock ? Stocke aussi la procédure.


Message édité par nraynaud le 21-03-2003 à 20:00:38
Reply

Marsh Posté le 21-03-2003 à 23:26:41    

nraynaud a écrit :


 
 
select "Host" from hosts where CAST("Hostname"AS text) not in (select CAST("Hostname" AS text) from lock where "Type" = 'Toto';);
 
C'est qu'une idée.
 
edit : au risque de parraître lourd, t'a bien foutu un index sur les colones "Hostname" dans les tables hosts et lock ? Stocke aussi la procédure.


 
merci ca marche parfaitement
 
j'ai pas mis d index, je sais pas a quoi ca sert... :)
et stocker la procedure, tu peut preciser ?
 
comme tu as l ai cale en SQL, je me permet de te pose une seconde question alors ;)
 
comment faire une update d une valeur dans une table et un insert dans une autre table en une seule requete ?

Reply

Marsh Posté le 21-03-2003 à 23:28:50    

eu nan en fait ca a pas l air de fonctionne la requete la... :(
il me sort tous les host de la tables hosts, il a rien a foutre de la table lock... :(


Message édité par djtoz le 21-03-2003 à 23:40:03
Reply

Marsh Posté le 22-03-2003 à 00:26:00    

djtoz a écrit :


 
merci ca marche parfaitement
 
j'ai pas mis d index, je sais pas a quoi ca sert... :)
et stocker la procedure, tu peut preciser ?
 
comme tu as l ai cale en SQL, je me permet de te pose une seconde question alors ;)
 
comment faire une update d une valeur dans une table et un insert dans une autre table en une seule requete ?


 
on peut pas, mais c'est pas grave.
Il existe la notion de transaction, c'est un ensemble d'actions qui ne sont visibles (aux autres personnes en gros) qu'une fois la transaction terminée.
Pour faire simple :
BEGIN;
ton insert;
ton update;
COMMIT;
 
si tu oublies le commit, ta transaction ne sera pas visible, c'est lui qui termine.
Si tu changes d'avis en cours de transaction (genre t'es en train de tapper à la main dans une console) tu peux faire ROLLBACK pour l'annuler (toutes les actions).
 
Pour les indexes et le stockage côté serveur, laisse tomber pour l'instant, tu verras avec le temps (au cours de tes lectures ou des cours).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed