Básicamente, quiero hacer esto:
update vehicles_vehicle v
join shipments_shipment s on v.shipment_id=s.id
set v.price=s.price_per_vehicle;
Estoy bastante seguro de que funcionaría en MySQL (mi fondo), pero no parece funcionar en postgres. El error que obtengo es:
ERROR: syntax error at or near "join"
LINE 1: update vehicles_vehicle v join shipments_shipment s on v.shi...
^
Seguramente hay una manera fácil de hacer esto, pero no puedo encontrar la sintaxis adecuada. Entonces, ¿cómo escribiría esto en PostgreSQL?
postgresql
syntax
mpen
fuente
fuente
vehicles_*
tablas y algunasshipments_*
tablas.Respuestas:
La sintaxis de ACTUALIZACIÓN es:
En tu caso, creo que quieres esto:
fuente
Déjame explicarte un poco más con mi ejemplo.
Tarea: información correcta, donde los abiturients (estudiantes a punto de abandonar la escuela secundaria) han presentado solicitudes a la universidad antes de que obtuvieran certificados escolares (sí, obtuvieron certificados antes de que fueran emitidos (por la fecha del certificado especificada). aumente la fecha de envío de la solicitud para que se ajuste a la fecha de emisión del certificado.
Así. siguiente declaración similar a MySQL:
Se convierte en PostgreSQL de tal manera
Como puede ver,
JOIN
laON
cláusula de la subconsulta original se ha convertido en una de lasWHERE
condiciones, que se conjugaAND
con otras, que se han movido de la subconsulta sin cambios. Y ya no hay necesidad de presentar unaJOIN
tabla consigo mismo (como estaba en la subconsulta).fuente
JOIN
como siempre en laFROM
lista:FROM abiturients b JOIN addresses c ON c.abiturient_id = b.id
from_list
cláusula UPDATE (que es la extensión de SQL de PostgreSQL). Además, vea las notas sobre las advertencias de unión de tablas en el enlace que proporcionó.La respuesta de Mark Byers es la óptima en esta situación. Aunque en situaciones más complejas, puede tomar la consulta de selección que devuelve los ID de fila y los valores calculados y adjuntarla a la consulta de actualización de esta manera:
Este enfoque le permite desarrollar y probar su consulta de selección y en dos pasos convertirla a la consulta de actualización.
Entonces, en su caso, la consulta de resultados será:
Tenga en cuenta que los alias de columna son obligatorios; de lo contrario, PostgreSQL se quejará de la ambigüedad de los nombres de columna.
fuente
Para aquellos que realmente quieran hacer algo
JOIN
, también pueden usar:Puede usar a_alias en la
SET
sección a la derecha del signo igual si es necesario. Los campos a la izquierda del signo igual no requieren una referencia de tabla, ya que se consideran de la tabla "a" original.fuente
Para aquellos que quieran hacer una UNIÓN que actualice SOLO las filas que su unión devuelve use:
Esto se mencionó anteriormente, pero solo a través de un comentario ... Dado que es fundamental obtener el resultado correcto publicando NUEVA respuesta que funcione
fuente
Aquí vamos:
Tan simple como pude hacerlo. ¡Gracias chicos!
También puede hacer esto:Pero luego tienes la tabla del vehículo allí dos veces, y solo puedes alias una vez, y no puedes usar el alias en la parte "set".fuente
join
restringe?Aquí hay un SQL simple que actualiza Mid_Name en la tabla Name3 usando el campo Middle_Name de Name:
fuente
El siguiente enlace tiene un ejemplo que resuelve y ayuda a entender mejor cómo usar
update
yjoin
con postgres.Ver: http://www.postgresqltutorial.com/postgresql-update-join/
fuente
Nombre de la primera tabla: tbl_table1 (tab1). Nombre de la segunda tabla: tbl_table2 (tab2).
Establezca la columna ac_status de tbl_table1 en "INACTIVO"
fuente