7
votes

Est-ce que `Supprimer de Join` Standard SQL?

Parmi d'autres questions, Celui-ci a demandé comment Supprimer d'une jointure .

Ma question: combien de cela est standard SQL? Sur quelles bases de données cela fonctionnerait-il réellement (notamment pour moi serait Oracle, MySQL et SQLSERVER)?


0 commentaires

6 Réponses :


0
votes

Je utilisais des requêtes similaires lorsque j'étais sur un serveur MS SQL. Pas sûr des autres.


0 commentaires

6
votes

Supprimer ... de .. ne fait pas partie des normes ANSI, ni de la mise à jour ... de ... à ce sujet. Cela inclut une syntaxe de jointure, car la jointure ne peut être spécifiée qu'avec.

Tous les fournisseurs implémentent ceci dans une forme ou une autre.


1 commentaires

Et la manière standard de supprimer avec la jointure sur d'autres tables consiste à utiliser l'instruction Fusionner , si disponible avec votre DB spécifique.



2
votes

La dernière fois que j'ai examiné la norme ANSI, la méthode préférée était la sous-requête et non des jointures. Lorsqu'il s'agissait d'une seule implémentation, où le portage de votre code n'est pas un problème, vous pouvez utiliser des extensions spécifiques au fournisseur librement, quand elles sont plus efficaces (bien que la mise à jour de, et j'imagine que la suppression de certains scénarios a été imprévisible: < Un href = "https://sqlserverfast.com/blog/hugo/2008/03/lets-deprecate-update-de/" rel = "NOFOollow Noreferrer"> https://sqlserverfast.com/blog/hugo/2008/ 03 / permet de déprécation-mise à jour - de / ). Personnellement, j'utilise généralement des CTES pour de nombreuses opérations de suppression ... mais mon développement est limité au serveur SQL et je n'ai pas à vous inquiéter de la portabilité du tout. La fusion peut également être un bon choix lorsque vous effectuez plusieurs opérations DML, mais à nouveau, cela n'est pas implémenté de la même manière (ou du tout) sur tous les fournisseurs.

Dans votre cas, je dirais que rester loin de la suppression de ... Inscrivez-vous parce que la syntaxe variera légèrement sur les trois plates-formes. Si vous utilisez des procédures stockées, cela est moins un problème que si le SQL est intégré à vos applications, mais toujours un problème néanmoins.


0 commentaires


6
votes

1 commentaires

Combien de ceci est standard SQL? Peut-être que je devrais poser une autre question .. Supprimer de SELECT ..?!



4
votes

La syntaxe standard SQL-92 nécessitait une sous-requête scalaire. Il s'agit d'une solution relativement solide car il n'y a pas d'ambiguïté (contrairement aux alternatives exclusives pouvant donner des résultats imprévisibles / inattendus).

Cependant, l'un des inconvénients de l'approche SQL-92 est qu'il peut être verbeux et impliquer des constructions répétitives par exemple. p>

UPDATE MyTable
   SET col1 = (
               SELECT T.colA
                 FROM OtherTable T
                WHERE T.ID = MyTable.ID
              ), 
       col2 = (
               SELECT T.colB
                 FROM OtherTable T
                WHERE T.ID = MyTable.ID
              )
 WHERE EXISTS (
               SELECT *
                 FROM OtherTable T
                WHERE T.ID = MyTable.ID
              );


0 commentaires