Compartilhar 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ê fazer 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 as 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_func para funcionário_id_func. Dentro de cada linha da tabela de funcionários, a coluna gerente_id_func 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 o nome do chefe e o nome de um dos funcionários do chefe. A 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 relações reflexivas, consulte Como: Criar auto-associaçõ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 potencial Supervisor é um funcionário com um nível maior de trabalho). A 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 Join de comparação.

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

  • Usando uma tabela duas vezes sem uma auto-associação mesmo 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 outros livros daqueles autores. A 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 vários usos de qualquer tabela, 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