Capos de MS Access come to me (mierda queries y demás)

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Lux
    ルクス
    • 24-04-2003
    • 24465

    #1

    Capos de MS Access come to me (mierda queries y demás)

    Bueno, antes que nada, necesito descripciones y pasos detallados. Me olvidé prácticamente todo lo que sabía de Access y no sé nada de SQL más que hacer un SELECT *


    En fin, la problemática, relativamente sencilla, es esta:

    Tengo una Tabla1 con 4 columnas (nombres modificados acordemente):
    El juego, Promociones, Juegos nuevos, Mas vendidos.

    Las columnas están completas de la siguiente forma:
    El juego (el juego en cuestión) = 1 fila
    Promociones (las 3 promociones para el juego en cuestión) = 3 filas
    Juegos nuevos y más vendidos = 4 filas.



    Esas filas están completas con nombres de juegos. Lo que necesito es reemplazar el nombre del juego por el código del juego.

    Un problema adicional es que los nombres pueden aparecer mal escritos.



    Lo que hice fue crearme una Tabla2 con "reglas de reemplazo".
    Es decir, en la primera columna, los nombres de los juegos (todas las posibles variaciones de typos) y al lado, el código.




    Ahora, como hago para mostrar la Tabla1 con los códigos reemplazados mediante Tabla2?

    Es decir, que quede de la siguiente forma:


    Tienen que quedar de la misma forma, es decir, la primera columna tiene que mostrar esas 3 filas vacías, la 2da, la 4ta fila vacía, etc.
    Editado por última vez por Lux; 17-06-2009, 01:04 PM.
  • Lux
    ルクス
    • 24-04-2003
    • 24465

    #2
    kpoyo? JEJ noséegds

    Lo que logré hasta ahora es hacer un query para el reemplazo de CADA columna, pero no sé "unirlo", o como hacer un query común para no tener que hacer 4.

    Este es el query, sencillísimo e incompleto (la búsqueda es casesensitive, lo que es una increíble mierda)

    Por ejemplo, para la columna más vendidos:
    Código:
    SELECT "Tabla2"."Codigo" FROM "Tabla1", "Tabla2" WHERE "Tabla1"."Masvendidos" = "Tabla2"."Nombre"
    Eso me devuelve lo que necesito, pero again, no sé unirlo :3

    Ciegamente intenté hacer una nueva query que muestre a su vez las otras 4 queries. Los resultados fueron desastrozos.


    Adicionalmente, los queries de la primera columna (la que tiene solo 1 fila completa) y la 2da (3 filas de 4) devuelven el valor reemplazado pero eliminan los vacíos.

    Comentario

    • CoyoteX
      Son Goku
      • 16-09-2005
      • 17784

      #3
      porque no reemplazas los nombres por codigos?

      igual tu query con un left join te resuelve el problema, probalo
      Editado por última vez por CoyoteX; 17-06-2009, 11:45 AM.

      Comentario

      • Lux
        ルクス
        • 24-04-2003
        • 24465

        #4
        Eso es lo que tengo que hacer. A mí me llegan "en" nombres, no "en" códigos.

        Comentario

        • CoyoteX
          Son Goku
          • 16-09-2005
          • 17784

          #5
          a lo que voy es... podes tirar un Update y reemplazarlos segun tu tabla de "traduccion"?

          Comentario

          • Lux
            ルクス
            • 24-04-2003
            • 24465

            #6
            Esa es la idea. No sé como.

            Comentario

            • CoyoteX
              Son Goku
              • 16-09-2005
              • 17784

              #7
              update tabla1 set tabla1.juego = tabla2.codigo from tabla1 inner join tabla2 on tabla1.juego = tabla2.nombre

              lo escribi asi medio al voleo, pero tendria que andar

              Comentario

              • Lux
                ルクス
                • 24-04-2003
                • 24465

                #8
                Traducido a mi db:

                UPDATE Tabla1 SET Tabla1.Juego = Listita2.CODE from Tabla1 INNER JOIN Tabla2 IN Tabla1.Juego = Tabla2.Nombre

                Estado SQL: HY000
                Código de error: 1000

                syntax error, unexpected $end, expecting BETWEEN or IN or SQL_TOKEN_LIKE


                =(
                Editado por última vez por Lux; 17-06-2009, 12:13 PM.

                Comentario

                • Kpoyo
                  Mandatory rape!
                  • 16-05-2004
                  • 8042

                  #9
                  La solucion temporal es unir los querys.

                  SELECT Columna1, null, null, null FROM ... (condicion para columna 1)
                  UNION ALL
                  SELECT null, Columna2, null, null FROM ... (condicion para columna 2)
                  ...
                  UNION ALL
                  SELECT null, null, null, Columna4 FROM ... (Condicion para columna 4)

                  Despues con tiempo lo completo bien. Probablemente tengas que hacer 4 self joins para reemplazar.

                  Comentario

                  • Night Walker
                    イノベイター。
                    • 22-11-2006
                    • 9213

                    #10
                    Código:
                    UPDATE "Tabla1"
                    SET "Tabla1"."Juego" = "Tabla2"."Codigo"
                    FROM "Tabla1" INNER JOIN "Tabla2"
                    ON "Tabla1"."Juego" = "Tabla2"."Nombre"
                    Código:
                    UPDATE "Tabla1"
                    SET "Tabla1"."Promociones" = "Tabla2"."Codigo"
                    FROM "Tabla1" INNER JOIN "Tabla2"
                    ON "Tabla1"."Promociones" = "Tabla2"."Nombre"
                    Código:
                    UPDATE "Tabla1"
                    SET "Tabla1"."Juegos Nuevos" = "Tabla2"."Codigo"
                    FROM "Tabla1" INNER JOIN "Tabla2"
                    ON "Tabla1"."Juego nuevo" = "Tabla2"."Nombre"
                    Código:
                    UPDATE "Tabla1"
                    SET "Tabla1"."Masvendidos" = "Tabla2"."Codigo"
                    FROM "Tabla1" INNER JOIN "Tabla2"
                    ON "Tabla1"."Masvendidos" = "Tabla2"."Nombre"
                    Antes de probar esto hace un backup de la base de datos. Tal ves hacer mierda todo.
                    Editado por última vez por Night Walker; 17-06-2009, 12:26 PM.

                    Comentario

                    • CoyoteX
                      Son Goku
                      • 16-09-2005
                      • 17784

                      #11
                      Originalmente publicado por Lux
                      Traducido a mi db:

                      UPDATE Tabla1 SET Tabla1.Juego = Listita2.CODE from Tabla1 INNER JOIN Tabla2 IN Tabla1.Juego = Tabla2.Nombre

                      Estado SQL: HY000
                      Código de error: 1000

                      syntax error, unexpected $end, expecting BETWEEN or IN or SQL_TOKEN_LIKE


                      =(
                      donde dice "IN" debe decir "ON"

                      Comentario

                      • CoyoteX
                        Son Goku
                        • 16-09-2005
                        • 17784

                        #12
                        Originalmente publicado por Night Walker
                        Código:
                        UPDATE "Tabla1"
                        SET "Tabla1".Juego = Tabla2.Nombre
                        FROM "Tabla1" LEFT OUTER JOIN "Tabla2"
                        ON "Tabla1"."Masvendidos" = "Tabla2"."Nombre"
                        Antes de probar esto hace un backup de la base de datos. Tal ves hacer mierda todo.
                        che, el ON ese no tienen ningun sentido, actualizas un campo, y haces la relacion por otro ? para que?

                        Comentario

                        • Lux
                          ルクス
                          • 24-04-2003
                          • 24465

                          #13
                          Si sdsd, era ON, pero tiró el mismo error.

                          Igual estoy con OpenOffice BASE u_U

                          Ahora pruebo con Access a ver que onda.

                          Comentario

                          • Night Walker
                            イノベイター。
                            • 22-11-2006
                            • 9213

                            #14
                            Cambie unas cosas fijate ahora. Vas a tener que tirar un update por columna.

                            Que SQL usa el open?
                            Editado por última vez por Night Walker; 17-06-2009, 12:28 PM.

                            Comentario

                            • Lux
                              ルクス
                              • 24-04-2003
                              • 24465

                              #15
                              ACCESS 2007 DE LO PEOR

                              En fin, la query de Coyotex quedó así:

                              UPDATE Tabla1
                              SET Tabla1.Juego = Tabla2.Codigo
                              FROM Tabla1 INNER JOIN Tabla2 ON (Tabla1.Juego = Tabla2.Nombre);

                              me tira syntax error (missing operator) in query expression 'Tabla2.Codigo FROM Tabla1 INNER JOIN Tabla2 ON (Tabla1.Juego = Tabla2.Nombre)'.


                              u_u

                              Comentario

                              Trabajando...