Partilhar via


Usando uma tabela duas vezes em uma consulta

Você pode usar a mesma tabela duas (ou mais) vezes, de dentro de uma única consulta.Há várias situações em que você faz isso.

  • Criando uma auto-associação com uma relação reflexiva você pode associar uma tabela a mesma usando uma relação reflexiva — uma relação em que as colunas de chave externa de referência e colunas de chave primária referida estão na mesma tabela.Por exemplo, suponha que a tabela de funcionários contenha uma coluna adicional, gerente_funcionário_id_func e que exista uma chave externa de gerente_id_emp para funcionário.Dentro de cada linha da tabela de funcionários, a coluna gerente_id_emp indica o chefe do funcionário.Mais precisamente, ele indica a id_func do chefe do funcionário.

    Associando a tabela a mesma usando esse relacionamento reflexivo, você pode estabelecer um conjunto de resultados no qual cada linha contém um nome de chefe e o nome de um dos funcionários desse chefe.O SQL resultante pode parecer com isso:

    SELECT 
        boss.lname, 
        boss.fname, 
        employee.lname, 
        employee.fname
    FROM 
        employee
            INNER JOIN 
            employee boss 
            ON employee.manager_emp_id 
            =  boss.emp_id
    

    Para obter mais informações sobre como criar associações usando os relacionamentos reflexivas, consulte Como: criar auto-relações automaticamente.

  • Criando uma auto-associação sem uma relação reflexiva você pode associar uma tabela a mesmo sem usar um relacionamento reflexivo.Por exemplo, você pode estabelecer um conjunto de resultados no qual cada linha descreve um funcionário e um potencial Supervisor para aquele funcionário.(Um Supervisor é um funcionário com um nível maior de trabalho). O SQL resultante pode parecer com isso:

    SELECT 
        employee.fname, 
        employee.lname, 
        mentor.fname, 
        mentor.lname 
    FROM 
        employee 
            INNER JOIN 
            employee mentor 
            ON employee.job_lvl 
            <  mentor.job_lvl
    

    Observe que a associação usa uma condição diferente da igualdade.Para obter mais informações sobre a associação de tabelas usando condições diferente da igualdade, consulte Operadores de comparação de ingressar em.

    Para obter mais informações sobre a criação de auto-relações usando colunas não relacionadas, consulte Como: criar manualmente de auto-relações.

  • Usando uma tabela duas vezes sem uma auto-associação par sem uma auto-associação, você pode usar a mesma tabela duas vezes (ou mais) em uma consulta.Por exemplo, você pode estabelecer um conjunto de resultados que contém os outros livros do autor ou autores de seu livro favorito.Nesse caso, use a tabela AutoresTítulo duas vezes — uma vez para localizar os autores do seu livro favorito (É o inimigo de raiva?) e uma vez para localizar os outros livros daqueles autores.O SQL resultante pode parecer com isso:

    SELECT 
        other_title.title
    FROM 
        titles favorite_title 
            INNER JOIN 
            titleauthor favorite_titleauthor 
            ON favorite_title.title_id 
            =  favorite_titleauthor.title_id 
                INNER JOIN 
                authors 
                ON favorite_titleauthor.au_id 
                =  authors.au_id 
                    INNER JOIN 
                    titleauthor other_titleauthor 
                    ON authors.au_id 
                    =  other_titleauthor.au_id 
                        INNER JOIN 
                        titles other_title 
                        ON other_titleauthor.title_id 
                        =  other_title.title_id 
    WHERE 
        favorite_title.title 
        = 'Is Anger the Enemy?' 
      AND 
        favorite_title.title 
        <> other_title.title 
    
    ObservaçãoObservação

    Para distinguir entre os diversos usos de qualquer tabela, a consulta anterior usa os seguintes aliases: título_favorito, títuloautor_favorito, outros_títuloautor e outros_títulos.Para obter mais informações sobre aliases, consulte Como: criar Aliases de tabela.

Consulte também

Conceitos

Trabalhar com dados no painel de resultados

Outros recursos

Especificando critérios de pesquisa