Cruzar dos tablas para encontrar los registros no coincidentes

Tengo una tabla con los números de actas uno por fila y otra tabla con los números de actas por rangos (desde y hasta), quisiera saber como cruzarlas para encontrar los registros no coincidentes.

Agradezco su ayuda.

Respuesta

Tienes que crear un consulta entre las dos tablas, y en las propiedades de la relación entre las dos tablas, indicar que quieres mostrar todos los registros de una tabla y solamente los coincidentes de la otra. Esto hará que la línea que en la consulta te muestra la relación entre las dos tablas se convierta en una flecha que va de la primera a la segunda

Luego, en las condiciones de la selección, filtras todos los registros de la segunda tabla que te devuelvan un Nulo. Estos son los no coincidentes. Es decir, registros que estan en la primera y no en la segunda.

Si luego quieres ver los registros de la seguns que no están en la primera, haces otra consulta del mismo modo, pero en este caso la flecha apuntará de la segunda tabla a la primera.

Si lo quieres todo en una única consulta, puedes hacer una consulta de unión en base a estas dos consultas.

1 respuesta más de otro experto

Respuesta
1

He preparado este ejemplo, consta de 3 tablas y una función. Lo hago con DAO.

TABLA RANGOS

TABLA ACTAS

FORMULARIO PARA LLAMAR LA FUNICIÓN

Al hacer clic sobre el botón Ver no coincidentes, obtengo la tabla siguiente:

TABLA NO COINCIDENTES 

CÓDIGO DEL BOTÓN DEL FORMULARIO

Private Sub btnNoCoincidentes_Click()
  Call nocoincide
End Sub

CÓDIGO DE LA FUNCIÓN

Aunque lo hago con una función puede copiar el código y pasarlo a un procedimiento.

Public Function nocoincide()
 Dim aux As Variant
 Dim aux2 As String
 Dim x As Long
 Dim db As DAO.Database
 Dim rs As DAO.Recordset
 Dim mid As Long
 Dim mdesde As Long
 Dim mhasta As Long
 'Retiro los registros de la tabla temporal
 CurrentDb.Execute "DELETE FROM tem_actas_faltan"
 Set db = CurrentDb
 Set rs = db.OpenRecordset("tblrangos")
 Do Until rs.EOF
    mid = rs!id
    mdesde = rs!NRO_ACTA_DESDE
    mhasta = rs!NRO_ACTA_HASTA
    For x = mdesde To mhasta
      aux = Nz(DLookup("[NRO_ACTA]", "tblactas", "STR([NRO_ACTA]) =" & x), "")
      If aux = "" Then
         aux2 = Format(x, "000000")
         CurrentDb.Execute "INSERT INTO tem_actas_faltan(id,NRO_ACTA) VALUES(" & mid & ",'" & aux2 & "'" & ")"
      End If
    Next x
   rs.MoveNext
Loop
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
If MsgBox("¿Quiere ver la tabla de los no coincidentes?", vbYesNo + vbDefaultButton2 + vbQuestion, "NO COINCIDENTES") = vbYes Then
  DoCmd.OpenTable "tem_actas_faltan", acViewNormal, acReadOnly
End If
End Function

Puede solicitar el ejemplo a [email protected], favor en el asunto hacer referencia a la consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas