Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Sentencias SQL condicionales

Estas en el tema de Sentencias SQL condicionales en el foro de Bases de Datos General en Foros del Web. Hola, no estoy muy puesto en SQL, y querría saber si se puede hacer sentencias condicionales. He encontrado algo para Oracle, pero no sé si ...
  #1 (permalink)  
Antiguo 27/07/2004, 10:22
 
Fecha de Ingreso: noviembre-2003
Ubicación: Alicante
Mensajes: 52
Antigüedad: 20 años, 5 meses
Puntos: 0
Sentencias SQL condicionales

Hola,

no estoy muy puesto en SQL, y querría saber si se puede hacer sentencias condicionales. He encontrado algo para Oracle, pero no sé si sirve.

Bueno, decir que trabajo con PHP, y tengo un script que actualiza una base de datos. Pongamos que hace esta operacion por ejemplo:

Código:
 "INSERT INTO tabla (1, 2) values (a, b)";
¿Se podría hacer algo como...

Código:
 "INSERT INTO tabla (1, 2) values (a, b)
SI NO EXISTE EL REGISTRO tabla.claveprincipal = 'unvalor' ";
?

No sé si me explicado, sería hacer una sentencia de insert sólo en el caso de que no existiera el artículo que hace el insert.

Gracias!,
un saludo
  #2 (permalink)  
Antiguo 27/07/2004, 14:50
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
En SQL Server usas la sentencia CASE:

CASE condicion THEN accion ELSE accion END

Pero creo que solo funciona en SQL Server
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 28/07/2004, 01:51
Avatar de peloteitor  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 849
Antigüedad: 20 años, 5 meses
Puntos: 1
No estoy muy puesto en php asi que no puedo ponerte el codigo, pero intentare que se entienda lo mejor posible:

$query = "SELECT * FROM tabla WHERE claveprincipal = unvalor";
Ejecutas la consulta;
if (numero de filas afectadas por el SELECT == 0){
$query2 = "INSERT INTO tabla (1, 2) values (a, b)";
Ejecutas la consulta;
}

De lo que se trata es de aprovechar que trabajas con php y sacar la condicion fuera de la consulta sql.
__________________
El sexo sin amor es una experiencia vacía. Pero como experiencia vacía es una de las mejores.

Woody Allen
  #4 (permalink)  
Antiguo 28/07/2004, 07:46
 
Fecha de Ingreso: noviembre-2003
Ubicación: Alicante
Mensajes: 52
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola,

primero gracias por las respuestas. Con respecto al case, trabajo sobre mysql, así que temo que no me funcione. De todas formas lo investigaré.

Y sobre el código en PHP, lo que quiero ahorrarme es eso, escribir código php. Quiero que sean sentencias unicas porque son unas 140mil, y van en un archivo de texto plano para ejecutar desde SSH con el comando mysql.

Gracias de nuevo, saludos
  #5 (permalink)  
Antiguo 28/07/2004, 14:46
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
en MySQL la sentencia para condiciones dentro de sentencias es IF

SELECT * FROM mitablita
WHERE id_field = IF(condicion, que_regreso_si_es_verdadero, que_regreso_si_es_falso)
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #6 (permalink)  
Antiguo 28/07/2004, 15:35
 
Fecha de Ingreso: noviembre-2003
Ubicación: Alicante
Mensajes: 52
Antigüedad: 20 años, 5 meses
Puntos: 0
Mithrandir, muchas gracias por la respuesta, mañana mismo empezaré con las pruebas

Salud!
  #7 (permalink)  
Antiguo 12/09/2004, 08:05
 
Fecha de Ingreso: noviembre-2003
Ubicación: Alicante
Mensajes: 52
Antigüedad: 20 años, 5 meses
Puntos: 0
Otra duda

Hola de nuevo,

iba a ponerme con las sentencias condicionales (sé que ha pasado tiempo, pero han pasado muchas cosas :P), y con tu enorme ayuda, Mithrandir, pero encuentro un pequeño problema que no sé resolver.

Me explicaste muy bien cómo hacer condicionales con un select, pero no encuentro la forma de hacerlo con insert.

Explico lo que tengo que hacer, y a ver si la sentencia es correcta o al menos va encaminada. Tengo dos bases de datos: sobre una de ellas se trabaja a diario (local) y sobre otra no (web). Sobre la local se borran todos los dias productos que, por extensión, no se borran en web (hablamos de 30-40 productos diarios). Entonces, la sentencia sería algo como...

Código:
IF ("campo1 NOT IN tabla", "INSERT INTO tabla values (1,2)", ---NADA---)
¿Sería correcto? No puedo hacer pruebas hasta la semana entrante, que es cuando estaré en el servidor, pero agradecería cualquier ayuda :)

Muchas gracias!,
  #8 (permalink)  
Antiguo 13/09/2004, 15:44
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
No, en ese caso prueba una alternativa mejor:
Código:
INSERT INTO tabla VALUES (campoA, campoB)
SELECT otra_tabla.campoA, otra_tabla.campoB
FROM otra_tabla
	LEFT JOIN tabla 
		ON tabla.llave = otra_tabla.llave
WHERE tabla.llave IS NULL
Usando subquerys tambien es posible, la lectura es mas clara, pero es mas costoso para el procesador:
Código:
INSERT INTO tabla VALUES (campoA, campoB)
SELECT campoA, campoB
FROM otra_tabla
WHERE llave NOT IN (SELECT llave FROM tabla)
PD. Mi mayor experiencia es en SQL Server, si estas sentencias no funcionan es probable a alguna falla de sintaxis de MySQL, en particular no se como se hacen los subquerys en MySQL
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:49.