我有两张桌子:
工作
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);
描述
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');
在此示例中,我希望能够为一份工作添加两个描述。代码运行正常,我可以对其进行查询:
SELECT * FROM jobs;
这将返回预期的结果:
1|Soldier|1|5
2|Pastor|2|3
3|Firefighter|5|4
我一直在尝试做的是获取一个列出作业名称以及主要和次要描述名称的查询:
Firefighter|Brave|Agile
我还没能得到那个结果。
我努力了:
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;
这将返回一个错误:
Parse error: ambiguous column name: descriptions.desc_name
SELECT jobs.job_name, descriptions.desc_name FROM jobs JOIN descriptions ON...
error here ---^
我在互联网上搜索了该错误,但没有找到任何我想要完成的示例。
我尝试了许多不同的组合:
RIGHT JOIN, LEFT JOIN, UNION, UNION ALL, ALIAS
在多种配置中。我最接近的是使用 UNION,但它没有按预期输出结果;这是我尝试过的 UNION:
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;
返回:
Soldier|Strong
Pastor|Pious
Firefighter|Brave
Soldier|Brave
Pastor|Honest
Firefighter|Agile
它按要求返回结果,所以我知道我做错了。我只是不知道我做了什么,导致无法将结果打印在每项作业的一行中,如上面的 Firefighter 示例所示。
我尝试过创建列别名、表别名等。我不知道该如何处理。如能得到任何帮助,我将不胜感激。
您引用该表
description
两次,因此需要为每个引用分配一个唯一的别名。您不能两次或多次连接同一张表,因此请使用别名,以便数据库了解您想要什么