Qu'est-ce que « E153 requêtes actualisables avec les sous-requêtes » dans la norme SQL?

StackOverflow https://stackoverflow.com/questions/2020189

Question

Je n'ai pas le (cher) standard SQL à portée de main; quelles sont les requêtes actualisables dans le noyau / fondation SQL?

Je vois que PostgreSQL ne les supporte pas, mais d'autres bases de données ne; pouvez-vous me montrer à la documentation sur la façon dont ils travaillent dans ces bases de données?

PostgreSQL a de réécriture des requêtes et des vues actualisables avec la règle < a href = "http://www.postgresql.org/docs/current/interactive/sql-createrule.html" rel = "nofollow noreferrer"> système; est-ce très différent?

Était-ce utile?

La solution

Je viens de découvrir cet exemple Oracle sur Wikipédia qui ressemble à un SELECT sur le côté gauche d'une mise à jour:

UPDATE (
SELECT *
  FROM articles  
  JOIN classification c 
    ON a.articleID = c.articleID 
) AS a
SET a.[updated_column] = updatevalue
WHERE c.classID = 1

Alors que la plupart des bases de données ont besoin de la requête à écrire:

UPDATE a
SET a.[updated_column] = updatevalue
FROM articles a 
JOIN classification c 
ON a.articleID = c.articleID 
WHERE c.classID = 1

Liens: Les href="http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/statements_10008.htm#SQLRF55455" oracle , exemples .

Est-ce que d'autres bases de données prennent en charge ce? Où est-il documenté?


Ayant maintenant posé mes mitaines crasseux sur la norme, je vais le citer.

E153 se réfère à:

  

7.12 Le paragraphe « »: A est   actualisable même si son contient un

Depuis une expression de requête est aussi une table (pas intuitive mais il est dans SQL99 4.16.3 opérations impliquant des tables), cela signifie que l'expression de requête est un « tableau udpatable ». Ce qui, selon 4.16 signifie que je peux insérer dans et DELETE d'eux.

Ce qui signifie que je peux courir ci-dessus, ainsi que:

DELETE FROM (SELECT * FROM t1 JOIN t2 WHERE t1c1 = t2c3);

Il y a des règles plus pour déterminer quelles expressions requête sont actualisable, contenues dans SQL99-fondation 7.11 et 7.12; ils sont plutôt impliqués. PostgreSQL ne laisse pas les expressions de requête qui ne sont pas des noms de table soient actualisable. Il y a des travaux en cours sur des vues actualisables. Je ne suis pas sûr de l'utilité de la fonction est hors de vue, mais la norme est certainement intéressant, et plus étrange que prévu.

[Il se sent seul ici. Choisir ma réponse mieux.]

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top