es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo encontrar coincidencias comunes para diferentes valores de columna en SQL

Tienes la siguiente tabla llamada “Amigos”:

La meta es encontrar cuántos usuarios tienen exactamente la misma lista de amigos. En este caso, el resultado serían el ID del usuario 1 y el ID del usuario 4, ya que ambos son amigos de “2” y “3”.

Creo que estoy en el camino correcto al usar el código siguiente:

SELECT * FROM Amigos A, Amigos B WHERE A.amigo_id=B.amigo_id AND A.usuario_id <> B.usuario_id

Sin embargo, no puedo averiguar cómo terminar la consulta para que calcule la lista coincidente de amigos. ¿Alguien tiene alguna sugerencia?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para encontrar los usuarios que tienen exactamente la misma lista de amigos, se puede utilizar el método de subconsulta junto con alias.

    Aquí está la consulta SQL que puede darle el resultado deseado:

    SELECCIONAR DISTINCTO A.user_id, B.user_id 
    DE Amigos A 
    ÚNETE Amigos B 
    EN A.user_id < B.user_id 
    Y NO EXISTE (
      SELECCIONAR * DE Amigos 
      DONDE user_id = A.user_id 
      Y amigo_id NO ESTÁ EN (
        SELECCIONAR amigo_id DE Amigos 
        DONDE user_id = B.user_id
      )
    )
    

    Descompongamos la consulta:

    • Estamos utilizando una unión consigo mismo utilizando alias A y B.
    • Seleccionamos pares distintos de user_id de los alias A y B donde A.user_id < B.user_id.
    • En la subconsulta, seleccionamos solo aquellas filas de la tabla Amigos donde el user_id es igual a A.user_id y el amigo_id no está en la lista de amigos para el usuario B.
    • Finalmente, el operador “NO EXISTE” devuelve verdadero si la subconsulta no devuelve ninguna fila. Esto significa que la lista de amigos de los usuarios A y B es exactamente la misma.

    Esta consulta devolverá el resultado de la siguiente manera:

    | user_id | user_id |
    |---------|---------|
    | 1       | 4       |
    

    Esto significa que el usuario 1 y el usuario 4 tienen exactamente la misma lista de amigos.

Comments are closed.