web-dev-qa-db-fra.com

Instruction MYSQL SELECT WITHIN IF

C'est une question simple, mais je n'ai trouvé aucune réponse pendant 2 heures.

Comment utilisez-vous la déclaration MYSQL IF? Peu importe ce que je mets, ça ne marche pas. Dans SQL Server, il s'agit d'un travail de 5 secondes.

Doit-il être dans une procédure?

Pouvez-vous utiliser un SELECT dans une instruction IF?

Pas vraiment intéressé par la fonction IF ici.

Merci pour toute aide.

21
tura

Comment utiliser l'instruction IF dans select

select if(status>0, 'active', 'inactive') as status from users

Oui, vous pouvez utiliser select dans IF

Exemple:

select if((select count(*) from versions) > (select count(*) from groups), true, false) as value
13
Srihari Goud

Vous pouvez sélectionner un autre champ dans la même requête mais l'utilisation de la requête select risque de ne pas être prise en charge. Une requête peut renvoyer plusieurs valeurs, mysql ne prenant pas en charge le concept de ligne dans une colonne. 

SELECT IF(`field1`>1,`field2`,`field3`) FROM TABLE1 WHERE 1

ici field1, field2, field3 sont des champs d'une même table

Est-ce que cela vous aide?

5
Harish

Doit-il être dans une procédure?

Oui, vous devez être dans une procédure pour utiliser une instruction if.

Pouvez-vous utiliser un SELECT dans une instruction IF?

Oui, vous pouvez:

drop procedure if exists sp;

create procedure sp () begin
    if ((select 1 /*from whatever table would work*/)=1) then
        select 'it works';
    end if;
end;

call sp;

drop procedure sp;
5
Benoit

Vous l'avez laissé entendre dans votre commentaire , mais aucune des réponses ici ne l'indique explicitement, je vais donc:

Dans MySQL, vous ne pouvez pas utiliser une instruction IF en dehors du corps d’une procédure stockée. La documentation implique cela lorsqu'elle introduit le concept en tant qu '"instruction IF pour programmes enregistrés" (c'est moi qui souligne).

Autant que je sache, il n’existe aucun moyen simple de contrôler le flux d’exécution dans les instructions émises sur la ligne de commande Prompt ou via le client (par exemple, à partir de PHP), sauf en interrogeant des valeurs, puis en basculant le flux de contrôle en fonction de celles en dehors de MySQL. (ie en utilisant l'instruction if de PHP au lieu de celle de MySQL). J'aimerais bien être corrigé à ce sujet cependant :-)


Vous pouvez simuler ceci au cas par cas en utilisant d'autres constructions ..__ Par exemple:

IF x THEN 
  INSERT INTO mytable (mycol)
  VALUES ('foo')
END IF

pourrait devenir

INSERT INTO mytable (mycol)
SELECT 'foo'
FROM dual
WHERE x

(selon cette réponse )


Vous pouvez également créer, appeler, puis supprimer une nouvelle procédure stockée:

DELIMITER \\
CREATE PROCEDURE tmpfunc() BEGIN
  IF x THEN 
    INSERT INTO mytable (mycol)
    VALUES ('foo');
  END IF;
END \\
DELIMITER ;
CALL tmpfunc();
DROP PROCEDURE tmpfunc;

(selon cette réponse )

2
Rich

vous recherchez CASE WHEN? http://dev.mysql.com/doc/refman/5.0/fr/case-statement.html

IF existe déjà dans le manuel http://dev.mysql.com/doc/refman/5.0/fr/if-statement.html

Je suppose que le lien @Nanne est plus pertinent. Il suffit de l'ajouter à la liste des liens ici. http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html

2
Nishant

Plusieurs requêtes MySQL utilisant if illustrent une approche probablement pertinente ici.

Notez que j'ai supposé que cette question demandait "comment puis-je utiliser les données d'une table pour diriger le flux de contrôle susceptible de modifier une autre partie de la base de données?"

0
rdm
    CASE
        WHEN receiver = '$userid' THEN receiver
        ELSE sender
    END AS contact
0
SuperSpy