Eu tenho duas mesas:
empregos
CREATE TABLE IF NOT EXISTS jobs (
job_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
job_name TEXT,
prime_desc INTEGER NOT NULL REFERENCES descriptions(desc_id),
scnd_desc INTEGER NOT NULL REFERENCES descriptions(desc_id),
);
INSERT INTO jobs (job_name, prime_desc, scnd_desc) VALUES ('Soldier', 1, 5);
INSERT INTO jobs (job_name, prime_desc, scnd_desc) VALUES ('Pastor', 2, 3);
INSERT INTO jobs (job_name, prime_desc, scnd_desc) VALUES ('Firefighter', 5, 4);
descrições
CREATE TABLE IF NOT EXISTS descriptions (
desc_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
desc_name TEXT,
);
INSERT INTO descriptions (desc_name) VALUES ('Strong');
INSERT INTO descriptions (desc_name) VALUES ('Pious');
INSERT INTO descriptions (desc_name) VALUES ('Honest');
INSERT INTO descriptions (desc_name) VALUES ('Agile');
INSERT INTO descriptions (desc_name) VALUES ('Brave');
Neste exemplo, gostaria de poder adicionar duas descrições a um trabalho. O código funciona e posso consultá-lo:
SELECT * FROM jobs;
Isso retorna o resultado esperado:
1|Soldier|1|5
2|Pastor|2|3
3|Firefighter|5|4
O que estou tentando fazer é obter uma consulta que liste o nome do trabalho e os nomes das descrições primária e secundária:
Firefighter|Brave|Agile
Não consegui obter esse resultado.
Eu tentei:
SELECT
jobs.job_name,
desc.desc_name
FROM
jobs
JOIN
descriptions ON jobs.prime_desc = descriptions.desc_id
JOIN
descriptions ON jobs.scnd_desc = descriptions.desc_id;
Isso retorna um erro:
Parse error: ambiguous column name: descriptions.desc_name
SELECT jobs.job_name, descriptions.desc_name FROM jobs JOIN descriptions ON...
error here ---^
Pesquisei na Internet sobre esse erro e não consegui encontrar nada que fosse um exemplo do que estou tentando realizar.
Eu tentei muitas combinações diferentes de:
RIGHT JOIN, LEFT JOIN, UNION, UNION ALL, ALIAS
em múltiplas configurações. O mais próximo que cheguei foi com UNION, mas não produziu os resultados desejados; aqui está o UNION que tentei:
SELECT
jobs.job_name, descriptions.desc_name
FROM
jobs
JOIN
descriptions ON jobs.prime_desc = descriptions.desc_id
UNION
SELECT
jobs.job_name, descriptions.desc_name
FROM
jobs
JOIN
descriptions ON jobs.scnd_desc = descriptions.desc_id;
Isso retorna:
Soldier|Strong
Pastor|Pious
Firefighter|Brave
Soldier|Brave
Pastor|Honest
Firefighter|Agile
Ele está retornando os resultados conforme solicitado, então sei que é algo que estou fazendo de errado. Só não sei o que estou fazendo que não imprime os resultados em uma linha por trabalho, conforme ilustrado pelo exemplo do Bombeiro acima.
Tentei criar um alias de coluna, um alias de tabela etc. Não sei como abordar isso. Qualquer ajuda é apreciada.