Pregunta

No tengo el (caro) estándar SQL a la mano; ¿cuáles son consultas actualizables en SQL núcleo / fundación?

veo que PostgreSQL no los soporta, pero algunas otras bases de datos hago; usted me puede apuntar a la documentación sobre cómo funcionan en esas bases de datos?

PostgreSQL tiene reescritura de consultas y vistas actualizables con el href="http://www.postgresql.org/docs/current/interactive/rules.html" rel="nofollow noreferrer"> regla < a href = "http://www.postgresql.org/docs/current/interactive/sql-createrule.html" rel = "nofollow noreferrer"> sistema de ; ¿Es muy diferente?

¿Fue útil?

Solución

Me acabo este ejemplo Oracle en Wikipedia que se parece a un SELECT en el lado izquierdo de una actualización:

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

Mientras que la mayoría de las bases de datos necesitan la consulta para ser escrita como:

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

Enlaces: Los href="http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/statements_10008.htm#SQLRF55455" oráculo , ejemplos .

do otras bases de datos compatibles con esta? Donde se documenta?


Después de haber establecido ahora mis guantes sucios en la norma, sólo voy a citar a él.

E153 se refiere a:

  

numeral 7.12, “”: Un es   actualizable a pesar de que su contiene un

Desde hace expresiones de consulta es también una mesa (no es intuitivo, pero es en SQL99 4.16.3 Operaciones con tablas), significa que la expresión de consulta es una “mesa de udpatable”. Que de acuerdo con 4.16 medios que puede insertar en y DELETE de ellos.

Lo que significa que se puede ejecutar lo anterior, así como:

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

Hay algunas reglas más para determinar qué expresiones de consulta son actualizables, contenida en SQL99-cimiento de 7.11 y 7.12; son más bien los involucrados. PostgreSQL no permite que las expresiones de consulta que no son nombres de tabla sean actualizables. Hay un poco de trabajo que se realiza en vistas actualizables. No estoy seguro de lo útil que la función está fuera de la vista, pero la norma es sin duda interesante, y más raro de lo esperado.

[Se siente solo aquí. Recogiendo mi respuesta como la mejor.]

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top