Pular para o conteúdo
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #96523
    gsmdf
    Participante

      Olá colegas,

      Suponha que tenho 3 tabelas: A , B e C.

      A:
      campo0 (PK)
      campo1 (FK para tabela B)
      campo2 (FK para tabela C)
      campo3 (FK para tabela C)
      campo4 (FK para tabela C)

      B:
      campo1 (PK)
      campo2

      C:
      campo1(PK)
      campo2

      Quero fazer um select para verificar problema de redundância. Os campos “campo2” relativos as tabelas apontadas pelas 4 fks tem de ser iguais. Quero que o select retorne registros da tabela A que estejam com problema de redundância.
      Por exemplo:
      Suponha que o campo2 da tabela B tenha valor X.
      Campo2 da tabela C apontado pelo campo2 da tabela A tenha valor Y.

      Então o select deve retornar esse registro.
      Só não retorna se os 4 “campos2” estiverem com mesmo valor.

      Grato.

      #96533
      burga
      Participante

        Oi gsmdf,

        Uma solução simples é selecionar todos os registros de A e retirar aqueles que você não quer que apareça no seu resultado (os que possuem o campo2 com a mesma informação). Exemplo:

        SELECT * FROM A

        MINUS

        SELECT ALIAS1.*
        FROM A ALIAS1
        JOIN B ALIAS2
        ON ALIAS1.CAMPO1 = ALIAS2.CAMPO1
        JOIN C ALIAS3
        ON ALIAS1.CAMPO2 = ALIAS3.CAMPO1
        JOIN C ALIAS4
        ON ALIAS1.CAMPO3 = ALIAS4.CAMPO1
        JOIN C ALIAS5
        ON ALIAS1.CAMPO4 = ALIAS5.CAMPO1
        WHERE ALIAS2.CAMPO2 = ALIAS3.CAMPO2
        AND ALIAS2.CAMPO2 = ALIAS4.CAMPO2
        AND ALIAS2.CAMPO2 = ALIAS5.CAMPO2;

        Espero que ajude… Bem melhor do que fazer vários OR’s.

        #96537
        gsmdf
        Participante

          [quote=”burga”:34jo794o]Oi gsmdf,

          Uma solução simples é selecionar todos os registros de A e retirar aqueles que você não quer que apareça no seu resultado (os que possuem o campo2 com a mesma informação). Exemplo:

          SELECT * FROM A

          MINUS

          SELECT ALIAS1.*
          FROM A ALIAS1
          JOIN B ALIAS2
          ON ALIAS1.CAMPO1 = ALIAS2.CAMPO1
          JOIN C ALIAS3
          ON ALIAS1.CAMPO2 = ALIAS3.CAMPO1
          JOIN C ALIAS4
          ON ALIAS1.CAMPO3 = ALIAS4.CAMPO1
          JOIN C ALIAS5
          ON ALIAS1.CAMPO4 = ALIAS5.CAMPO1
          WHERE ALIAS2.CAMPO2 = ALIAS3.CAMPO2
          AND ALIAS2.CAMPO2 = ALIAS4.CAMPO2
          AND ALIAS2.CAMPO2 = ALIAS5.CAMPO2;

          Espero que ajude… Bem melhor do que fazer vários OR’s.[/quote]

          Muito bem notado resolver pelo complementar. Valeu Burga!

        Visualizando 3 posts - 1 até 3 (de 3 do total)
        • Você deve fazer login para responder a este tópico.