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çã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