Estoy tratando de comparar dos direcciones de la misma ID para ver si coinciden. Por ejemplo:

Id  Adress Code     Address
1   1               123 Main
1   2               123 Main
2   1               456 Wall
2   2               456 Wall
3   1               789 Right
3   2               100 Left

Sólo estoy tratando de averiguar si la dirección para cada ID de los partidos. Así que en este caso quiero regresar ID 3 como tener una dirección diferente para el Código de la Dirección 1 y 2.

Genial! Lo has intentado?
Que RDBMS? Si SQL Server, prueba a mirar en esta pregunta.
Lo siento, estoy usando esta dentro de Teradata.
Tienes que leer acerca de las combinaciones
Yo le recomiendo un vistazo largo y duro en sus mesas. Uno de los principios detrás de RDBMS es la idea de la singularidad, lo que hace que su vida sea mucho más fácil. La idea es que cada fila representa a una entidad distinta y no hay ninguna fila debe ser duplicado; singularidad que han hecho de este problema inexistente. Si no es demasiado tarde, te recomiendo revisar el diseño de la tabla.

OriginalEl autor Hatt | 2012-12-04

4 Comentarios

  1. 30

    Unirse a la mesa con sí mismo y darle dos diferentes alias (A y B en el ejemplo siguiente). Esto permite comparar diferentes filas de la misma tabla.

    SELECT DISTINCT A.Id
    FROM
        Address A
        INNER JOIN Address B
            ON A.Id = B.Id AND A.[Adress Code] < B.[Adress Code]
    WHERE
        A.Address <> B.Address

    El «menos que» la comparación < se asegura de que usted consigue 2 direcciones diferentes, y usted no recibe el mismo 2 de la dirección de códigos de dos veces. El uso de «no es igual» <> lugar, daría los códigos como (1, 2) y (2, 1); cada uno de ellos para el A alias y el B alias en turno.

    La cláusula join es responsable de la vinculación de las filas donde el donde-cláusula de pruebas de condiciones adicionales.


    La consulta anterior funciona con cualquier dirección de códigos. Si desea comparar las direcciones con la dirección específica de los códigos, puede cambiar la consulta para

    SELECT A.Id
    FROM
        Address A
        INNER JOIN Address B
            ON A.Id = B.Id
    WHERE                     
        A.[Adress Code] = 1 AND
        B.[Adress Code] = 2 AND
        A.Address <> B.Address

    Me imagino que esto podría ser útil para encontrar a los clientes tener una dirección de facturación (Adress Código = 1 como ejemplo) que difieren de la dirección de entrega (Dirección Código = 2) .

    Genial, muchas gracias!
    wow, muy cleaver. Gracias por dar dos ejemplos.

    OriginalEl autor Olivier Jacot-Descombes

  2. 4

    Esto funciona para PL/SQL:

    select count(*), id,address from table group by id,address having count(*)<2

    OriginalEl autor Yasin Okumuş

  3. 2

    Usted puede hacer esto utilizando un grupo de:

    select id, addressCode
    from t
    group by id, addressCode
    having min(address) <> max(address)

    Otra manera de escribir esto puede parecer más claro, pero no se realiza así:

    select id, addressCode
    from t
    group by id, addressCode
    having count(distinct address) > 1

    OriginalEl autor Gordon Linoff

  4. 0

    Personalmente, me gustaría imprimir a un archivo usando Perl o Python en el formato

    <COL_NAME>:  <COL_VAL>

    para cada fila, de modo que el archivo tiene tantas líneas como columnas. A continuación, me gustaría hacer un diff entre los dos archivos, asumiendo que usted está en Unix o compararlos utilizando algunas equivalente utilty en otro sistema operativo. Si usted tiene varios conjuntos de registros (es decir, más de una fila), quisiera anteponer a cada fila del archivo y, a continuación, el archivo tendría NUM_DB_ROWS * NUM_COLS líneas

    -1. Lo siento. El Dumping de datos de SQL a un archivo externo a diff con Perl o Python es malo; «yo sé cómo usar este martillo, así que vamos a tratar todo como un clavo». La solución no aborda la pregunta a todos, que era cómo hacer que SQL.
    La ventaja de escribir un script para hacer esto es que puede ser hecho funcionar para cualquier mesa sin tener que especificar los nombres de columna, que puede ser leída a partir de las tablas del sistema. He escrito un par de scripts como este para QAs que tenía para comparar conjuntos de registros a través de diferentes bases de datos donde sólo SQL no es suficiente y aún si lo hiciera, tendría que escribir una consulta personalizada para cada tabla diferente para reflejar las diferentes columnas. La única específicos de la tabla de datos en mis scripts, además de, por supuesto, la tabla de datos tales como el nombre, el esquema y el servidor, sería la cadena de criterios.
    Pero en comparación con tener que escribir cada nombre de columna, que es relativamente poco de configuración personalizada. SQL es una gran herramienta, pero que tiene la empresa limitaciones que son mejores vencer fuera de ella (en cosas como los lenguajes de secuencias de comandos) en lugar de las instrucciones SQL que se ven como una máquina de Rube Goldberg. Me gusta la limpieza, la estructura y la simplicidad. Usted puede mantener su downvote, no estoy pidiendo que cambie esto, esta elaboración es más de mi filosofía para el resto del mundo
    No. SQL está hecho para trabajar con los datos, y los datos que ya existe en la base de datos. No hay absolutamente CERO ventaja para moverlo fuera de la base de datos para encontrar duplicados (como las otras respuestas han demostrado). De nuevo, utilizar las herramientas adecuadas para el trabajo, y su respuesta no. Si usted estaba hablando acerca de un «script» es decir, un procedimiento almacenado, que está bien. La física de la exportación de los datos a un archivo externo y, a continuación, ejecuta una externa de secuencias de comandos de tareas en otro idioma (que puede crear por «la lectura de las tablas del sistema»), es simplemente incorrecto. (Yo simplemente estaba siendo cortés cuando le expliqué mi downvote.)
    Usted sabe muy bien a lo que me refería, pero para aclarar de modo que usted no está confundido: por supuesto, yo quería decir SQL está hecho para trabajar con datos ya ha almacenado en la base de datos. tal vez si usted fuera a mirar fuera tratando de hacerlo todo en Perl o Python (su aparente «una talla para todos» solución), usted podría darse cuenta de que hay más a la programación de la manipulación de archivos de texto. IOW, hay más herramientas en la caja de herramientas que un martillo. «Tomar perfectamente los buenos datos de la base de datos, extraer a un archivo de texto separado, jugar con los datos y, a continuación, actualizar la base de datos»??? De verdad???

    OriginalEl autor amphibient

Dejar respuesta

Please enter your comment!
Please enter your name here