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

problemas con not in en mysql

Estas en el tema de problemas con not in en mysql en el foro de Bases de Datos General en Foros del Web. Aupa, Creo que la clausula not in no es valida en mysql. Tengo una consulta sql que no se realizar que se montaria con ese ...
  #1 (permalink)  
Antiguo 24/06/2004, 01:30
 
Fecha de Ingreso: mayo-2004
Mensajes: 70
Antigüedad: 20 años
Puntos: 0
Pregunta problemas con not in en mysql

Aupa,

Creo que la clausula not in no es valida en mysql. Tengo una consulta sql que no se realizar que se montaria con ese principio.
Aqui os la espongo:
Quiero saber cuales son los tipos de oferta en los que no esta apuntado un usuario dado.

Las tablas que tengo son las siguientes:
usuario(codusuario,...)
tipoferta(codtipoferta,...)
tipoofertausuario(codtipoferta,codusuario,...).

La pregunta que habia realizado era la siguiente:

Código:
SELECT tipoferta. * 
FROM tipoferta
LEFT  JOIN tipofertausuario 
ON tipofertausuario.codTipOferta = tipoferta.codTipOferta
WHERE tipofertausuario.codusuario IS  null
El problema es que esta consulta no depende de un usuario sino que se aplica a todos los usuarios.

Gracias,

Un saludo.


Niko
  #2 (permalink)  
Antiguo 24/06/2004, 10:57
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Hola
Donde desea colocar NOT?
por lo que entiendo mas a o menos tu cunsulta en mysql seria asi:
Código:
SELECT * FROM tipoferta, usuario, tipofertausuario   
WHERE tipofertausuario.codTipOferta = tipoferta.codTipOferta AND
tipofertausuario.codusuario IS  null
Saludos!
  #3 (permalink)  
Antiguo 24/06/2004, 11:10
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 2 meses
Puntos: 8
Tiene razón Genetix. Al hacer un producto de las tres tablas y dejar solo los registros del usuario 'xxxx' obtenemos que en las líneas para las que no hay registro en la tabla tipofertausuario, los campos de ésta quedan nulos, por lo que con filtrar por los campos nulos de esta tabla obtienes los tipoferta en los que el usuario no está apuntado. Por fin, obtenemos solo la columna del código de oferta.

Código:
SELECT tipoferta.codoferta 
FROM tipoferta, usuario, tipofertausuario   
WHERE usuario.codusuario='xxxx' 
AND tipofertausuario.codTipOferta = tipoferta.codTipOferta 
AND tipofertausuario.codusuario IS null
La sentencia con NOT IN sería

Código:
SELECT * 
FROM tipoferta 
WHERE codtioferta NOT IN 
 (SELECT codtipoferta 
  FROM tiopertausuario 
  WHERE codusuario='xxxxx');
__________________
Kelpie

Última edición por Kelpie; 24/06/2004 a las 11:12
  #4 (permalink)  
Antiguo 24/06/2004, 12:18
 
Fecha de Ingreso: mayo-2004
Mensajes: 70
Antigüedad: 20 años
Puntos: 0
Os agradezco vuestra solucion pero no funciona:


Gracias,

Un saludo,

Niko
  #5 (permalink)  
Antiguo 24/06/2004, 15:39
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Hola devilnick
Podrias poner tu consulta SQL y detallar los campos contenidos en las tablas, asi creo que será mas facil entenderte y ayudarte
Saludos!
  #6 (permalink)  
Antiguo 25/06/2004, 01:31
 
Fecha de Ingreso: mayo-2004
Mensajes: 70
Antigüedad: 20 años
Puntos: 0
tengo una tabla con los datos de usuario:

usuario(codusuario, nombre, ...)

otra tabla que contiene tipos de oferta

tipoferta(codtipoferta, nombre, descripcion)

estas tablas tienen una relacion N M por lo tanto creo una relacion
usuariotipoferta con las claves primarias de las 2 relaciones:

usuariotipoferta(codusuario*,codtipoferta*)

la * quiere decir con son claves extranjeras.


Mi consulta es la siguiente:
Quiero saber para un usuario dado codusuario = 'niko' a que tipos de oferta (codtipoferta) no esta apuntado.

Mysql al no disponer de la clausula de SQL ANSI not in, no se como hacerlo. Se que se suelen resolver con un left join, que es el que pongo al principio, en el primer mensaje, pero el problema es que en esa sentencia no se como definirla para un usuario determinado.


Gracias,

Un saludo,


Niko
  #7 (permalink)  
Antiguo 16/07/2004, 04:51
 
Fecha de Ingreso: mayo-2004
Mensajes: 70
Antigüedad: 20 años
Puntos: 0
aqui teneis la solucion :

SELECT tipoferta.*
FROM tipoferta
LEFT JOIN ( select tipofertausuario.* from usuario left join tipofertausuario on usuario.codusuario= tipofertausuario.codusuario where usuario.codusuario = 'elcodigoquequieras') as l1
ON l1.codTipOferta = tipoferta.codTipOferta
WHERE tipofertausuario.codusuario IS null
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 09:02.