我对SQL相当陌生,所以我不确定我试图做什么甚至被称为联接。SQL查询加入3个表
我有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查询?
你试过连接表吗? –
如果您阅读我的问题,我提到我不知道我在做什么 - 我不知道如何进行连接,我甚至不知道是否需要连接。 –
如果你不知道你在做什么,那么也许一个好的开始将是了解SQL JOINS http://www.w3schools.com/sql/sql_join.asp – Bruce