viernes, 24 de abril de 2009

SQL interesantes

SQL de utilidad...

Para modificar un campo de una tabla A relacionando por campo clave de una tabla B:

UPDATE tablaA
SET tablaA.valorACambiar = valor
WHERE tablaA.valorClave IN (SELECT tablaB.valorClave FROM tablaB WHERE {condiciones where tablaB})
AND {condiciones where tablaA}

Para modificar un campo de una tabla A con un valor de otra tabla B. (Relacion 1 a 1)

UPDATE tablaA INNER JOIN tablaB ON (tablaA.valorClave = tablaB.valorClave)
SET tablaA.valorACambiar = tablaB.valorDeOrigen
WHERE {condiciones adicionales sobre tablaA} AND/OR {condiciones adicionales sobre tablaB}

creo que esta segunda posibilidad tambien sería válida:

UPDATE tablaA
SET tablaA.valorACambiar =
(SELECT tablaB.valorDeOrigen FROM tablaB WHERE tablaA.valorClave = tablaB.valorClave AND/OR {condiciones adicionales sobre tablaB})
WHERE {condiciones adicionales sobre tablaA}


Para realizar consultas sobre tablas:
Selects anidados (este tipo de select solo permite obtener resultados de la tabla definida en la clausula FROM)

SELECT tablaA.*
FROM tablaA
WHERE tablaA.valorClave IN
(SELECT tablaB.valorClave FROM tablaB WHERE {condiciones where tablaB})
AND/OR {condiciones where tablaA}


Selects con INNER JOIN (relacion 1 a 1)

SELECT tablaA.*, tablaB.*
FROM tablaA INNER JOIN tablaB ON (tablaA.valorClave = tablaB.valorClave)
WHERE {condiciones adicionales sobre tablaA} AND/OR {condiciones adicionales sobre tablaB}

Selects con LEFT JOIN (relacion 1 a N)
SELECT tablaA.*, tablaB.*
FROM tablaA LEFT JOIN tablaB ON (tablaA.valorClave = tablaB.valorClaveMultiple)
WHERE {condiciones adicionales sobre tablaA} AND/OR {condiciones adicionales sobre tablaB}

Añadir un contador de fila
SELECT (SELECT COUNT(*) FROM myTable T1 WHERE T1.UniqueField<=T2.UniqueField) as RowNum, T2.OtherField
FROM myTable T2
ORDER By T2.UniqueField

No hay comentarios:

Publicar un comentario