Comment puis-je mettre une clause if dans une chaîne SQL?

Alors, voici ce que je veux faire sur ma base de données MySQL .

J’aimerais:

SELECT * FROM itemsOrdered WHERE purchaseOrder_ID = '@purchaseOrdered_ID' AND status = 'PENDING' 

Si cela ne renverrait aucune ligne, ce qui est possible via if(dr.HasRows == false) , je if(dr.HasRows == false) maintenant une mise à jour dans la firebase database purchaseOrder :

 UPDATE purchaseOrder SET purchaseOrder_status = 'COMPLETED' WHERE purchaseOrder_ID = '@purchaseOrder_ID' 

Comment pourrais-je raccourcir un peu ce processus?

Pour votre requête spécifique, vous pouvez faire:

 UPDATE purchaseOrder SET purchaseOrder_status = 'COMPLETED' WHERE purchaseOrder_ID = '@purchaseOrder_ID' and not exists (SELECT * FROM itemsOrdered WHERE purchaseOrder_ID = '@purchaseOrdered_ID' AND status = 'PENDING' ) 

Cependant, je devine que vous bouclez à un niveau supérieur. Pour définir toutes ces valeurs, essayez ceci:

 UPDATE purchaseOrder SET purchaseOrder_status = 'COMPLETED' WHERE not exists (SELECT 1 FROM itemsOrdered WHERE itemsOrdered.purchaseOrder_ID = purchaseOrder.purchaseOrdered_ID AND status = 'PENDING' limit 1 ) 

Vous pouvez utiliser la syntaxe UPDATE plusieurs tables pour effectuer une itemsOrdered ANTI-JOIN entre itemsOrdered et itemsOrdered :

 UPDATE purchaseOrder p LEFT JOIN itemsOrdered i ON p.purchaseOrder_ID = i.purchaseOrder_ID AND i.status = 'PENDING' SET p.purchaseOrder_status = 'COMPLETED' WHERE p.purchaseOrder_ID = '@purchaseOrder_ID' AND i.purchaseOrder_ID IS NULL 

Puisque MySQL ne supporte pas if exists(*Your condition*) (*Write your query*) , vous pouvez obtenir une clause if en écrivant comme ceci:

 (*Write your insert or update query*) where not exists (*Your condition*) 

Vous pouvez également utiliser la requête suivante pour vérifier si l’enregistrement existe, puis le mettre à jour:

 if not exists(select top 1 fromFROM itemsOrdered WHERE purchaseOrder_ID = '@purchaseOrdered_ID' AND status = 'PENDING' ) Begin UPDATE purchaseOrder SET purchaseOrder_status = 'COMPLETED' WHERE purchaseOrder_ID = '@purchaseOrder_ID End 
 Select FROM t1 WHERE s11 > ANY (SELECT col1,col2 FROM t2 WHERE NOT EXISTS (SELECT * FROM t3 WHERE ROW(5*t2.s1,77)= (SELECT 50,11*s1 FROM t4 UNION SELECT 50,77 FROM (SELECT * FROM t5) AS t5))); 
 if not exists(select top 1 fromFROM itemsOrdered WHERE purchaseOrder_ID = '@purchaseOrdered_ID' AND status = 'PENDING' ) Begin UPDATE purchaseOrder SET purchaseOrder_status = 'COMPLETED' WHERE purchaseOrder_ID = '@purchaseOrder_ID End 

il peut vous aider lorsque vous utilisez la fusion dans SQL pour insérer, mettre à jour et supprimer en fonction de la déclaration de correspondance dans le serveur SQL comme exemple, il vous aide https://technet.microsoft.com/en-us/library/bb522522(v=sql. 105) .aspx

Si la table contient des millions d’enregistrements, la requête suivante fonctionnera rapidement.

 UPDATE PO SET PO.purchaseOrder_status = 'COMPLETED' FROM purchaseOrder PO LEFT OUTER JOIN itemsOrdered IOD ON IOD.purchaseOrder_ID = PO.purchaseOrdered_ID and IOD.status = 'PENDING' WHERE IOD.purchaseOrder_ID IS NULL