Elementos de una tabla que no estén en otra tabla

Dispongo de dos tablas A y B y necesito saber que elementos de la tabla A no están en la tabla B

2 respuestas

Respuesta
2

Supongamos que tengo una tabla Copia

Y otra tabla Otra

Con el asistente crea una consulta y cuando te muestre la ventana donde eliges las tablas pulsa Cerrar y elige Vista SQL y pon

SELECT * FROM Copia
WHERE nombrecliente NOT IN (SELECT nombrecliente FROM otra);

Así cuando la abras

O sea, los registros de la tabla Copia que no están en la tabla Otra

Me funciona, pero necesito indicar que solo busque de la tabla: OTRA solo los que tengan un Tipo de País especifico.

¿Cómo he de indicarlo dentro de la Vista SQL?

Mi ordenador es un portátil, por tanto la pantalla no da para más. Si tengo la tabla Copia

Y la tabla Otra

Donde puedes ver que faltan el registro 6 y 17 de Alemania. Construyo la consulta como

Al abrirla

Por cierto, si el país no lo tienes "decidido" puedes ponerlo como

Entonces cuando quieras abrir la consulta te pedirá que escribas un país, pones, por ejemplo, Alemania y lo de antes.

Te explico un poco más el proceso que estoy realizando para ver si puedo adaptarme a tus instrucciones:

Dispongo de una tabla:PRODUCTOS CABECERA

Con los siguientes campos que necesito controlar (Hay muchos más que estos pero no trabajan en este apartado):

IdProducto - Nombre Producto

Tabla:PRODUCTOS MATERIALES

IdProducto - Nombre Material - TipoAmortizacion - TipoMaestro

Lo que trato es ver que productos de la tabla PRODUCTOSCABECERA no tienen un material definido en la tabla de PRODUCTOSMATERIALES.

Hay dos campos en la tabla PRODUCTOSMATERIALES que son: TipoAmortizacion - TipoMaestro que son los que marcan el Tipo que estoy buscando:

Ejemplo:

El producto SILLAS no tiene ningún registro en la Tabla de MATERIALES para el TIPOAMORTIZACION -> Repuestos y TipoMaestro-> Base pero puede ser que en el TIPOAMORTIZACION ->Montaje y TipoMaestro-> Adjunto si lo tiene.

Son dos tablas que están conectadas por el IdProducto, lo que necesito es saber que productos de la Tabla PRODUCTOSCABECERA no tienen registros en la tabla de MATERIALES en función del TIPOAMORTIZACION y TipoMaestro.

Si necesitas más detalles dimero y trato de explicártelo. Gracias

Honestamente, no lo entiendo, Verás si tengo una tabla como dices

Y la otra tabla

¿Qué resultado debería arrojar la consulta?

Si pido SILLA los materiales en MONTAJE - BASE ha de figurar en el Form. Ya que NO existe en la Tabla Materiales. Este producto ha de figurar en el Formulario de las búsquedas sin Material, ya que se trata de encontrar Productos sin Materiales en el TipoAmortizacion y Maestro.

Si Pido SILLA en MONTAJE - ADJUNTO, este Producto NO figurara porque tiene dos Materiales Patas de Acero y Cuero Marrón.

El formulario que he de presentar es para mostrar que PRODUCTOS que no tienen MATERIALES en función del Tipo de Amortización y Tipo de Maestro que solicite.

No se si habré aclarado tus dudas, si necesitas más detalle dímelo y trato de explicártelo.

Vamos a ver si más o menos lo he entendido. Si la tabla Productos Materiales la tengo como la imagen, donde puedes ver que sólo el armario tiene la combinación MONTAJE y BASE.

Si ahora construyo la consulta poniéndola como

SELECT *
FROM productoscabecera
WHERE idproducto NOT IN (SELECT idproducto FROM productosmateriales where tipoamortizacion like [Escriba un tipo de amortizacion] and tipomaestro like [Escriba un tipo maestro]);

Cuando quiero abrirla

Escribo montaje, pulso Aceptar

Escribo base y pulso Aceptar

Entonces

Me salen los que no tienen en ningún registro la combinación Montaje y Base.

No sé si es eso.

Es eso exactamente lo que estaba buscando.

Podría evitar que me pregunte el valor de los dos Parámetros o sea poderselos indicar directamente en la consulta a través de dos campos que estarían en un formulario y la consulta recogiese el valor de ellos.

Campo:MAESTRO

Campo:AMORTIZACIÓN

Que al pulsar el botón de búsquedas directamente estos campos recogerían los valores para dárselos a la consulta.

Hay diferentes botones para cada uno de los parámetros existente y al pulsarlos los valos quedarían en los campos MAESTRO-AMORTIZACIÓN

Ya era hora que hablaras de código VB.

Si tengo el formulario tabular, al que he llamado Búsqueda con origen en la tabla ProductosCabecera.

Si pulso el botón me busca aquellos producto que no tienen ni montaje ni base.

El código del evento Al hacer clic del botón es

Private Sub Comando5_Click()
Me.RecordSource = "SELECT * FROM productoscabecera WHERE idproducto Not In (SELECT idproducto FROM productosmateriales" _
& " where tipoamortizacion like ""Montaje"" and tipomaestro like ""Base"")"
End Sub

Lo mismo para otras combinaciones.

Otra forma, creo que la mejor es

Le añado dos combinados donde eliges lo que no "quieres ver". En este caso elijo Montaje

Elijo Base y pulso el botón. Por cierto los combinados se llaman NoAmort y NoMaestro.

El código del evento Al hacer clic del botón es

Private Sub Comando11_Click()
If Not IsNull([NoAmort]) And Not IsNull([NoMaestro]) Then
Me.RecordSource = "SELECT * FROM productoscabecera WHERE idproducto Not In (SELECT idproducto FROM productosmateriales" _
& " where tipoamortizacion like '" & Me.NoAmort & "' and tipomaestro like '" & Me.NoMaestro & "')"
End If
End Sub

Las combinaciones de si sólo se elige uno, sólo se elige el segundo, o ambos las haces con elesif.

Me he perdido un poco con las ultimas instrucciones. Los botones que he de tratar son estos:

Cada uno de los botones mandan al campo (Independiente) el tipo de búsqueda que solicito que es la AMORTIZACIÓN y el campo MAESTRO siempre es "BASE" en este apartado.

De aquí busco la consulta e imprimo los resultados en un Formulario.

Son las AMORTIZACIONES : Materiales - Artes Finales - Manipulados - Extras, ¿cómo he de realizar el vba?

Me he perdido definitivamente. No entiendo absolutamente nada.

1º Si pulsas el ¿botón? Materiales, ¿te pasa al cuadro de texto de la derecha el valor Montaje? Es que entonces ¿para qué pasarle el valor, si en el código puedes poner lo de montaje? Lo mismo para los demás.

2º De donde salen esos ¿campos? De Artes finales, Manipulados, etc. Desde luego en la tabla Productos Materiales que citabas al principio no.

3º Eso de "De aquí busco la consulta e imprimo los resultados en un Formulario." ya ha sido la guinda.

Me rindo.

Respuesta
1

Hay varias formas : not in, not exists, left join, etc

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas