看看这些表格:
餐桌招聘:
表技能_招聘:
我想展示与招聘相关的技能。可以看到,表
skill_hirings
中有3条记录hiring_id = 3
。因此,当我使用左连接查询时,它返回 3 条相同的记录。
所以我想删除重复记录,并通过
id_hiring
仅返回唯一记录。
我读了一些 StackOverflow QnA,他们建议使用
GROUP BY
子句,但我仍然无法弄清楚。
查询:
SELECT id_hiring, company_id, title, status, start_salary, end_salary,
viewer, open, close, expired
FROM (
SELECT h.id id_hiring, * FROM hirings h
LEFT JOIN skill_hirings sh ON sh.hiring_id = h.id
LEFT JOIN skills s ON s.id = sh.skill_id
WHERE title ILIKE '%'
) RESULT
查询及结果:
注意:查询中的通配符
%
将替换为变量
SQL for sqlite 创建示例表和记录。请注意 OP 正在使用 postgresql
DROP TABLE IF EXISTS hirings;
DROP TABLE IF EXISTS skill_hiring;
CREATE TABLE hirings (
id INTEGER PRIMARY KEY,
user_id INTEGER NOT NULL,
company_id INTEGER NOT NULL,
title TEXT NOT NULL
);
CREATE TABLE skill_hiring (
id INTEGER PRIMARY KEY,
hiring_id INTEGER NOT NULL,
skill_id INTEGER NOT NULL,
FOREIGN KEY (hiring_id) REFERENCES hirings (id)
);
-- Insert data into hirings table
INSERT INTO hirings (id, user_id, company_id, title) VALUES
(1, 101, 201, 'Software Engineer'),
(2, 102, 202, 'Data Scientist'),
(3, 103, 203, 'Product Manager');
-- Insert data into skill_hiring table
INSERT INTO skill_hiring (id, hiring_id, skill_id) VALUES
(1, 1, 301), (10, 1, 301),
(2, 1, 302), (20, 2, 302),
(4, 2, 303), (40, 2, 303),
(5, 3, 304); -- Skills
SELECT skill_hiring.skill_id, hirings.title
FROM hirings
LEFT JOIN skill_hiring ON hirings.id = skill_hiring.hiring_id;
在写这个答案时,我们仍然不知道哪些字段来自哪些表。根据当前的解释,尚不清楚为什么以下内容无法满足您的需求(尽管它可能根本无法运行,具体取决于任何必填字段是否确实来自我所拥有的
skill_hirings
或 skills table
不包括在内)。
SELECT
h.id as id_hiring,
h.company_id,
h.title,
h.status,
h.start_salary,
h.end_salary,
h.viewer,
h.open,
h.close,
h.expired
FROM
hirings h
WHERE
h.title ILIKE '%'
一个快速而肮脏的解决方案是执行两次相同的查询,并将它们与
UNION
放在一起。它删除重复的行。
可能不是最优化的解决方案,但应该可行。