Sql Postgres查询一个表中的所有结果与另一个表中的条件数据混合
我有两个SQL表,我正试图用这两个表中的数据生成一个新表。Sql Postgres查询一个表中的所有结果与另一个表中的条件数据混合,sql,postgresql,Sql,Postgresql,我有两个SQL表,我正试图用这两个表中的数据生成一个新表。 作业表: jobs ( id SERIAL PRIMARY KEY, position TEXT NOT NULL, location TEXT NOT NULL, pay NUMERIC NOT NULL, duration TEXT NOT NULL, description TEXT NOT NULL, term TEXT NOT NULL, user_id INTEGER REFERENCES u
作业表:
jobs (
id SERIAL PRIMARY KEY,
position TEXT NOT NULL,
location TEXT NOT NULL,
pay NUMERIC NOT NULL,
duration TEXT NOT NULL,
description TEXT NOT NULL,
term TEXT NOT NULL,
user_id INTEGER REFERENCES users(id) ON DELETE SET NULL
)
应用表:
applied (
id SERIAL PRIMARY KEY,
completed BOOLEAN DEFAULT FALSE,
user_id INTEGER REFERENCES users(id) ON DELETE SET NULL,
job_id INTEGER REFERENCES jobs(id) ON DELETE SET NULL,
UNIQUE (user_id, job_id)
);
填充了数据的表格如下所示:作业表 应用表 我希望我的最后一个查询是一个与jobs表匹配的表,但它有一个名为
js_id
的新列,根据用户是否申请了该作业,该列的值为true或false。我希望桌子看起来像这样:
下面是我用来生成上表的查询:
SELECT DISTINCT on (jobs.id)
jobs.*, applied.user_id as applicant,
CASE WHEN applied.user_id = 1 THEN TRUE
ELSE FALSE END as js_id
FROM jobs
JOIN applied on jobs.id = applied.job_id;
但是,这不起作用,因为我向表中添加了更多的申请人。我得到了不同的true
和false
值,但我无法让它工作。当我删除(jobs.id)上的DISTINCT时,
我的真实值是一致的,但我最终得到的远不止我想要的3个作业。以下是在(jobs.id)上未显示的结果:
我想你希望存在
:
SELECT j.*,
(exists (select 1
from applied a
where a.job_id = j.id and a.user_id = 1
) as js_id
FROM jobs j;
我想你想要存在
:
SELECT j.*,
(exists (select 1
from applied a
where a.job_id = j.id and a.user_id = 1
) as js_id
FROM jobs j;