我对 SQL 还很陌生,所以我不确定我正在尝试做的事情是否称为联接。
我有 4 个表,使用这个模式:
CREATE TABLE survey (
id serial PRIMARY KEY,
title text,
password text
);
CREATE TABLE question (
id serial PRIMARY KEY,
surveyId integer REFERENCES survey(id),
value text
);
CREATE TABLE answer (
id serial PRIMARY KEY,
questionId integer REFERENCES question(id) ,
value text
);
CREATE TABLE vote (
id serial,
questionId integer REFERENCES question(id),
answerId integer REFERENCES answer(id)
);
给定一个特定的survey.id
(surveyId),我需要:
- 查找所有问题行,其中
question.surveyId
=surveyId
- 对于 (1) 中找到的每个问题行,找到所有答案行,其中
answer.questionId
=question.id
- 对于 (2) 中找到的每个答案,找到
vote.answerId
=的所有投票行answer.id
。 - 返回每个唯一 answerId 的投票行数。
因此,如果我有以下测试数据:
question
=============
id | surveyId
1 | 3
2 | 3
3 | 3
4 | 5
5 | 6
answer
===============
id | questionId
1 | 1
2 | 1
3 | 2
4 | 3
vote
==========================
id | questionId | answerId
1 | 1 | 1
2 | 1 | 2
3 | 1 | 1
4 | 2 | 3
5 | 4 | 22
如果初始surveyId
值为 3,那么我希望此查询的结果是:
answerId | count
================
1 | 2
2 | 1
3 | 1
有没有办法将其作为单个 SQL 查询来执行?