Thread: SQL help...

SQL help...

From
Alex Hochberger
Date:
To any SQL wizards out there,

I have finally exhausted my SQL knowledge.

I have 3 tables that I need to do a fancy join on...

1 stores the users
1 stores the questions
1 stores the user's answers to the questions (based on foreign keys to the
answers table)

I would like to create a result with the following columns:
some fields from the users, each of the questions

in each row should be the results from the users, and their user answers

Here is the tricky thing, people may have not answered each question, so I
would like to either leave that blank or put in a 0...

With an ugly hack, I get the results where they answered everything, but not
the partial answers.

Please cc: me on the reply, because I get this as a digest.

Thanks,
Alex

Re: SQL help...

From
Ryan Mahoney
Date:
Please post the sql statement that creates these tables.

-r

At 12:15 AM 5/16/01 -0400, Alex Hochberger wrote:

>To any SQL wizards out there,
>
>I have finally exhausted my SQL knowledge.
>
>I have 3 tables that I need to do a fancy join on...
>
>1 stores the users
>1 stores the questions
>1 stores the user's answers to the questions (based on foreign keys to the
>answers table)
>
>I would like to create a result with the following columns:
>some fields from the users, each of the questions
>
>in each row should be the results from the users, and their user answers
>
>Here is the tricky thing, people may have not answered each question, so I
>would like to either leave that blank or put in a 0...
>
>With an ugly hack, I get the results where they answered everything, but not
>the partial answers.
>
>Please cc: me on the reply, because I get this as a digest.
>
>Thanks,
>Alex
>
>---------------------------(end of broadcast)---------------------------
>TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
>
>
>
>---
>Incoming mail is certified Virus Free.
>Checked by AVG anti-virus system (http://www.grisoft.com).
>Version: 6.0.251 / Virus Database: 124 - Release Date: 4/26/01

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.251 / Virus Database: 124 - Release Date: 4/26/01

RE: SQL help...

From
Alex Hochberger
Date:
Users:
----------------------
CREATE TABLE "users" (
   "user_id" int8 DEFAULT nextval('user_id_seq'::text) NOT NULL,
   "group_id" int4 NOT NULL,
   "user_agent" varchar(200) NOT NULL,
   "ip_address" varchar(20) NOT NULL,
   CONSTRAINT "users_pkey" PRIMARY KEY ("user_id")
);
CREATE  UNIQUE INDEX "user_id_users_ukey" ON "users" ("user_id");
CREATE  INDEX "users_group_id_key" ON "users" ("group_id");
CREATE  INDEX "users_ip_address_key" ON "users" ("ip_address");
CREATE  INDEX "users_user_agent_key" ON "users" ("user_agent");

Questions:
----------------------
CREATE TABLE "questions" (
   "question_id" int8 DEFAULT nextval('question_id_seq'::text) NOT NULL,
   "survey_id" int4 NOT NULL,
   "question" text NOT NULL,
   CONSTRAINT "questions_pkey" PRIMARY KEY ("question_id")
);
CREATE  INDEX "questions_question_key" ON "questions" ("question");
CREATE  INDEX "questions_survey_id_key" ON "questions" ("survey_id");


User Answers:
----------------------
CREATE TABLE "user_answers" (
   "ua_id" int8 DEFAULT nextval('ua_id_seq'::text) NOT NULL,
   "user_id" int8 NOT NULL,
   "question_id" int8 NOT NULL,
   "qa_id" int8 NOT NULL,
   CONSTRAINT "user_answers_pkey" PRIMARY KEY ("ua_id")
);
CREATE  INDEX "user_answers_qa_id_key" ON "user_answers" ("qa_id");
CREATE  INDEX "user_answers_question_id_key" ON "user_answers"
("question_id");
CREATE  INDEX "user_answers_user_id_key" ON "user_answers" ("user_id");


All these questions will be for survey 1...

Alex

> -----Original Message-----
> From: Ryan Mahoney [mailto:ryan@paymentalliance.net]
> Sent: Tuesday, May 15, 2001 7:22 PM
> To: Alex Hochberger; 'pgsql-general@postgresql.org'
> Subject: Re: [GENERAL] SQL help...
>
>
> Please post the sql statement that creates these tables.
>
> -r
>
> At 12:15 AM 5/16/01 -0400, Alex Hochberger wrote:
>
> >To any SQL wizards out there,
> >
> >I have finally exhausted my SQL knowledge.
> >
> >I have 3 tables that I need to do a fancy join on...
> >
> >1 stores the users
> >1 stores the questions
> >1 stores the user's answers to the questions (based on
> foreign keys to the
> >answers table)
> >
> >I would like to create a result with the following columns:
> >some fields from the users, each of the questions
> >
> >in each row should be the results from the users, and their
> user answers
> >
> >Here is the tricky thing, people may have not answered each
> question, so I
> >would like to either leave that blank or put in a 0...
> >
> >With an ugly hack, I get the results where they answered
> everything, but not
> >the partial answers.
> >
> >Please cc: me on the reply, because I get this as a digest.
> >
> >Thanks,
> >Alex
> >
> >---------------------------(end of
> broadcast)---------------------------
> >TIP 2: you can get off all lists at once with the unregister command
> >     (send "unregister YourEmailAddressHere" to
> majordomo@postgresql.org)
> >
> >
> >
> >---
> >Incoming mail is certified Virus Free.
> >Checked by AVG anti-virus system (http://www.grisoft.com).
> >Version: 6.0.251 / Virus Database: 124 - Release Date: 4/26/01
>

RE: SQL help...

From
Ryan Mahoney
Date:
I don't know of a single query that will satisfy your needs (not saying
that there isn't one...) - you might try in whatever language you are using:

select users
for each user
         select questions
         for each question
                 select answers
         end loop
end loop

This is a bit of computation, but if it's just to generate a report you
should be fine.

Good Luck!

-r

At 12:28 AM 5/16/01 -0400, Alex Hochberger wrote:

>Users:
>----------------------
>CREATE TABLE "users" (
>    "user_id" int8 DEFAULT nextval('user_id_seq'::text) NOT NULL,
>    "group_id" int4 NOT NULL,
>    "user_agent" varchar(200) NOT NULL,
>    "ip_address" varchar(20) NOT NULL,
>    CONSTRAINT "users_pkey" PRIMARY KEY ("user_id")
>);
>CREATE  UNIQUE INDEX "user_id_users_ukey" ON "users" ("user_id");
>CREATE  INDEX "users_group_id_key" ON "users" ("group_id");
>CREATE  INDEX "users_ip_address_key" ON "users" ("ip_address");
>CREATE  INDEX "users_user_agent_key" ON "users" ("user_agent");
>
>Questions:
>----------------------
>CREATE TABLE "questions" (
>    "question_id" int8 DEFAULT nextval('question_id_seq'::text) NOT NULL,
>    "survey_id" int4 NOT NULL,
>    "question" text NOT NULL,
>    CONSTRAINT "questions_pkey" PRIMARY KEY ("question_id")
>);
>CREATE  INDEX "questions_question_key" ON "questions" ("question");
>CREATE  INDEX "questions_survey_id_key" ON "questions" ("survey_id");
>
>
>User Answers:
>----------------------
>CREATE TABLE "user_answers" (
>    "ua_id" int8 DEFAULT nextval('ua_id_seq'::text) NOT NULL,
>    "user_id" int8 NOT NULL,
>    "question_id" int8 NOT NULL,
>    "qa_id" int8 NOT NULL,
>    CONSTRAINT "user_answers_pkey" PRIMARY KEY ("ua_id")
>);
>CREATE  INDEX "user_answers_qa_id_key" ON "user_answers" ("qa_id");
>CREATE  INDEX "user_answers_question_id_key" ON "user_answers"
>("question_id");
>CREATE  INDEX "user_answers_user_id_key" ON "user_answers" ("user_id");
>
>
>All these questions will be for survey 1...
>
>Alex
>
> > -----Original Message-----
> > From: Ryan Mahoney [mailto:ryan@paymentalliance.net]
> > Sent: Tuesday, May 15, 2001 7:22 PM
> > To: Alex Hochberger; 'pgsql-general@postgresql.org'
> > Subject: Re: [GENERAL] SQL help...
> >
> >
> > Please post the sql statement that creates these tables.
> >
> > -r
> >
> > At 12:15 AM 5/16/01 -0400, Alex Hochberger wrote:
> >
> > >To any SQL wizards out there,
> > >
> > >I have finally exhausted my SQL knowledge.
> > >
> > >I have 3 tables that I need to do a fancy join on...
> > >
> > >1 stores the users
> > >1 stores the questions
> > >1 stores the user's answers to the questions (based on
> > foreign keys to the
> > >answers table)
> > >
> > >I would like to create a result with the following columns:
> > >some fields from the users, each of the questions
> > >
> > >in each row should be the results from the users, and their
> > user answers
> > >
> > >Here is the tricky thing, people may have not answered each
> > question, so I
> > >would like to either leave that blank or put in a 0...
> > >
> > >With an ugly hack, I get the results where they answered
> > everything, but not
> > >the partial answers.
> > >
> > >Please cc: me on the reply, because I get this as a digest.
> > >
> > >Thanks,
> > >Alex
> > >
> > >---------------------------(end of
> > broadcast)---------------------------
> > >TIP 2: you can get off all lists at once with the unregister command
> > >     (send "unregister YourEmailAddressHere" to
> > majordomo@postgresql.org)
> > >
> > >
> > >
> > >---
> > >Incoming mail is certified Virus Free.
> > >Checked by AVG anti-virus system (http://www.grisoft.com).
> > >Version: 6.0.251 / Virus Database: 124 - Release Date: 4/26/01
> >
>
>
>
>---
>Incoming mail is certified Virus Free.
>Checked by AVG anti-virus system (http://www.grisoft.com).
>Version: 6.0.251 / Virus Database: 124 - Release Date: 4/26/01

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.251 / Virus Database: 124 - Release Date: 4/26/01

RE: SQL help...

From
Per-Olof Pettersson
Date:
Hi

I think this is a matter of an outer join.

SELECT *
FROM users, questions LEFT JOIN answers ON questions.question_id =
answers.question_id;

Note that the outer join is implemented in 7.1.x.

Best regards
Per-Olof Pettersson

>>>>>>>>>>>>>>>>>> Original Message <<<<<<<<<<<<<<<<<<

On 2001-05-16, 06:41:34, alex@feratech.com (Alex Hochberger) wrote
regarding RE: SQL help...:


> Users:
> ----------------------
> CREATE TABLE "users" (
>    "user_id" int8 DEFAULT nextval('user_id_seq'::text) NOT NULL,
>    "group_id" int4 NOT NULL,
>    "user_agent" varchar(200) NOT NULL,
>    "ip_address" varchar(20) NOT NULL,
>    CONSTRAINT "users_pkey" PRIMARY KEY ("user_id")
> );
> CREATE  UNIQUE INDEX "user_id_users_ukey" ON "users" ("user_id");
> CREATE  INDEX "users_group_id_key" ON "users" ("group_id");
> CREATE  INDEX "users_ip_address_key" ON "users" ("ip_address");
> CREATE  INDEX "users_user_agent_key" ON "users" ("user_agent");

> Questions:
> ----------------------
> CREATE TABLE "questions" (
>    "question_id" int8 DEFAULT nextval('question_id_seq'::text) NOT NULL,
>    "survey_id" int4 NOT NULL,
>    "question" text NOT NULL,
>    CONSTRAINT "questions_pkey" PRIMARY KEY ("question_id")
> );
> CREATE  INDEX "questions_question_key" ON "questions" ("question");
> CREATE  INDEX "questions_survey_id_key" ON "questions" ("survey_id");


> User Answers:
> ----------------------
> CREATE TABLE "user_answers" (
>    "ua_id" int8 DEFAULT nextval('ua_id_seq'::text) NOT NULL,
>    "user_id" int8 NOT NULL,
>    "question_id" int8 NOT NULL,
>    "qa_id" int8 NOT NULL,
>    CONSTRAINT "user_answers_pkey" PRIMARY KEY ("ua_id")
> );
> CREATE  INDEX "user_answers_qa_id_key" ON "user_answers" ("qa_id");
> CREATE  INDEX "user_answers_question_id_key" ON "user_answers"
> ("question_id");
> CREATE  INDEX "user_answers_user_id_key" ON "user_answers" ("user_id");


> All these questions will be for survey 1...

> Alex

> > -----Original Message-----
> > From: Ryan Mahoney [mailto:ryan@paymentalliance.net]
> > Sent: Tuesday, May 15, 2001 7:22 PM
> > To: Alex Hochberger; 'pgsql-general@postgresql.org'
> > Subject: Re: [GENERAL] SQL help...
> >
> >
> > Please post the sql statement that creates these tables.
> >
> > -r
> >
> > At 12:15 AM 5/16/01 -0400, Alex Hochberger wrote:
> >
> > >To any SQL wizards out there,
> > >
> > >I have finally exhausted my SQL knowledge.
> > >
> > >I have 3 tables that I need to do a fancy join on...
> > >
> > >1 stores the users
> > >1 stores the questions
> > >1 stores the user's answers to the questions (based on
> > foreign keys to the
> > >answers table)
> > >
> > >I would like to create a result with the following columns:
> > >some fields from the users, each of the questions
> > >
> > >in each row should be the results from the users, and their
> > user answers
> > >
> > >Here is the tricky thing, people may have not answered each
> > question, so I
> > >would like to either leave that blank or put in a 0...
> > >
> > >With an ugly hack, I get the results where they answered
> > everything, but not
> > >the partial answers.
> > >
> > >Please cc: me on the reply, because I get this as a digest.
> > >
> > >Thanks,
> > >Alex
> > >
> > >---------------------------(end of
> > broadcast)---------------------------
> > >TIP 2: you can get off all lists at once with the unregister command
> > >     (send "unregister YourEmailAddressHere" to
> > majordomo@postgresql.org)
> > >
> > >
> > >
> > >---
> > >Incoming mail is certified Virus Free.
> > >Checked by AVG anti-virus system (http://www.grisoft.com).
> > >Version: 6.0.251 / Virus Database: 124 - Release Date: 4/26/01
> >

> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)

RE: SQL help...

From
Per-Olof Pettersson
Date:
Hi

Sorry it should be

SELECT *
FROM users, questions LEFT JOIN answers ON questions.question_id =
answers.question_id AND users.user_id = answers.user_id

Otherwise you'd get a h*ll lot more rows than expected ;-)

Regards
Per-Olof Pettersson


>>>>>>>>>>>>>>>>>> Original Message <<<<<<<<<<<<<<<<<<

On 2001-05-16, 07:10:21, Per-Olof Pettersson <pgsql@peope.net> wrote
regarding RE: SQL help...:


> Hi

> I think this is a matter of an outer join.

> SELECT *
> FROM users, questions LEFT JOIN answers ON questions.question_id =
> answers.question_id;

> Note that the outer join is implemented in 7.1.x.

> Best regards
> Per-Olof Pettersson

> >>>>>>>>>>>>>>>>>> Original Message <<<<<<<<<<<<<<<<<<

> On 2001-05-16, 06:41:34, alex@feratech.com (Alex Hochberger) wrote
> regarding RE: SQL help...:


> > Users:
> > ----------------------
> > CREATE TABLE "users" (
> >    "user_id" int8 DEFAULT nextval('user_id_seq'::text) NOT NULL,
> >    "group_id" int4 NOT NULL,
> >    "user_agent" varchar(200) NOT NULL,
> >    "ip_address" varchar(20) NOT NULL,
> >    CONSTRAINT "users_pkey" PRIMARY KEY ("user_id")
> > );
> > CREATE  UNIQUE INDEX "user_id_users_ukey" ON "users" ("user_id");
> > CREATE  INDEX "users_group_id_key" ON "users" ("group_id");
> > CREATE  INDEX "users_ip_address_key" ON "users" ("ip_address");
> > CREATE  INDEX "users_user_agent_key" ON "users" ("user_agent");

> > Questions:
> > ----------------------
> > CREATE TABLE "questions" (
> >    "question_id" int8 DEFAULT nextval('question_id_seq'::text) NOT NULL,
> >    "survey_id" int4 NOT NULL,
> >    "question" text NOT NULL,
> >    CONSTRAINT "questions_pkey" PRIMARY KEY ("question_id")
> > );
> > CREATE  INDEX "questions_question_key" ON "questions" ("question");
> > CREATE  INDEX "questions_survey_id_key" ON "questions" ("survey_id");


> > User Answers:
> > ----------------------
> > CREATE TABLE "user_answers" (
> >    "ua_id" int8 DEFAULT nextval('ua_id_seq'::text) NOT NULL,
> >    "user_id" int8 NOT NULL,
> >    "question_id" int8 NOT NULL,
> >    "qa_id" int8 NOT NULL,
> >    CONSTRAINT "user_answers_pkey" PRIMARY KEY ("ua_id")
> > );
> > CREATE  INDEX "user_answers_qa_id_key" ON "user_answers" ("qa_id");
> > CREATE  INDEX "user_answers_question_id_key" ON "user_answers"
> > ("question_id");
> > CREATE  INDEX "user_answers_user_id_key" ON "user_answers" ("user_id");


> > All these questions will be for survey 1...

> > Alex

> > > -----Original Message-----
> > > From: Ryan Mahoney [mailto:ryan@paymentalliance.net]
> > > Sent: Tuesday, May 15, 2001 7:22 PM
> > > To: Alex Hochberger; 'pgsql-general@postgresql.org'
> > > Subject: Re: [GENERAL] SQL help...
> > >
> > >
> > > Please post the sql statement that creates these tables.
> > >
> > > -r
> > >
> > > At 12:15 AM 5/16/01 -0400, Alex Hochberger wrote:
> > >
> > > >To any SQL wizards out there,
> > > >
> > > >I have finally exhausted my SQL knowledge.
> > > >
> > > >I have 3 tables that I need to do a fancy join on...
> > > >
> > > >1 stores the users
> > > >1 stores the questions
> > > >1 stores the user's answers to the questions (based on
> > > foreign keys to the
> > > >answers table)
> > > >
> > > >I would like to create a result with the following columns:
> > > >some fields from the users, each of the questions
> > > >
> > > >in each row should be the results from the users, and their
> > > user answers
> > > >
> > > >Here is the tricky thing, people may have not answered each
> > > question, so I
> > > >would like to either leave that blank or put in a 0...
> > > >
> > > >With an ugly hack, I get the results where they answered
> > > everything, but not
> > > >the partial answers.
> > > >
> > > >Please cc: me on the reply, because I get this as a digest.
> > > >
> > > >Thanks,
> > > >Alex
> > > >
> > > >---------------------------(end of
> > > broadcast)---------------------------
> > > >TIP 2: you can get off all lists at once with the unregister command
> > > >     (send "unregister YourEmailAddressHere" to
> > > majordomo@postgresql.org)
> > > >
> > > >
> > > >
> > > >---
> > > >Incoming mail is certified Virus Free.
> > > >Checked by AVG anti-virus system (http://www.grisoft.com).
> > > >Version: 6.0.251 / Virus Database: 124 - Release Date: 4/26/01
> > >

> > ---------------------------(end of broadcast)---------------------------
> > TIP 2: you can get off all lists at once with the unregister command
> >     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)

RE: RE: SQL help...

From
Alex Hochberger
Date:
The outer join approaches didn't appear to work, and I'm no longer convinced
that this is doable...  I brute forced it...  I'll worry about it later...

Alex

> -----Original Message-----
> From: Per-Olof Pettersson [mailto:pgsql@peope.net]
> Sent: Wednesday, May 16, 2001 1:10 AM
> To: pgsql-general@postgresql.org
> Subject: [GENERAL] RE: SQL help...
>
>
> Hi
>
> I think this is a matter of an outer join.
>
> SELECT *
> FROM users, questions LEFT JOIN answers ON questions.question_id =
> answers.question_id;
>
> Note that the outer join is implemented in 7.1.x.
>
> Best regards
> Per-Olof Pettersson
>
> >>>>>>>>>>>>>>>>>> Original Message <<<<<<<<<<<<<<<<<<
>
> On 2001-05-16, 06:41:34, alex@feratech.com (Alex Hochberger) wrote
> regarding RE: SQL help...:
>
>
> > Users:
> > ----------------------
> > CREATE TABLE "users" (
> >    "user_id" int8 DEFAULT nextval('user_id_seq'::text) NOT NULL,
> >    "group_id" int4 NOT NULL,
> >    "user_agent" varchar(200) NOT NULL,
> >    "ip_address" varchar(20) NOT NULL,
> >    CONSTRAINT "users_pkey" PRIMARY KEY ("user_id")
> > );
> > CREATE  UNIQUE INDEX "user_id_users_ukey" ON "users" ("user_id");
> > CREATE  INDEX "users_group_id_key" ON "users" ("group_id");
> > CREATE  INDEX "users_ip_address_key" ON "users" ("ip_address");
> > CREATE  INDEX "users_user_agent_key" ON "users" ("user_agent");
>
> > Questions:
> > ----------------------
> > CREATE TABLE "questions" (
> >    "question_id" int8 DEFAULT
> nextval('question_id_seq'::text) NOT NULL,
> >    "survey_id" int4 NOT NULL,
> >    "question" text NOT NULL,
> >    CONSTRAINT "questions_pkey" PRIMARY KEY ("question_id")
> > );
> > CREATE  INDEX "questions_question_key" ON "questions" ("question");
> > CREATE  INDEX "questions_survey_id_key" ON "questions"
> ("survey_id");
>
>
> > User Answers:
> > ----------------------
> > CREATE TABLE "user_answers" (
> >    "ua_id" int8 DEFAULT nextval('ua_id_seq'::text) NOT NULL,
> >    "user_id" int8 NOT NULL,
> >    "question_id" int8 NOT NULL,
> >    "qa_id" int8 NOT NULL,
> >    CONSTRAINT "user_answers_pkey" PRIMARY KEY ("ua_id")
> > );
> > CREATE  INDEX "user_answers_qa_id_key" ON "user_answers" ("qa_id");
> > CREATE  INDEX "user_answers_question_id_key" ON "user_answers"
> > ("question_id");
> > CREATE  INDEX "user_answers_user_id_key" ON "user_answers"
> ("user_id");
>
>
> > All these questions will be for survey 1...
>
> > Alex
>
> > > -----Original Message-----
> > > From: Ryan Mahoney [mailto:ryan@paymentalliance.net]
> > > Sent: Tuesday, May 15, 2001 7:22 PM
> > > To: Alex Hochberger; 'pgsql-general@postgresql.org'
> > > Subject: Re: [GENERAL] SQL help...
> > >
> > >
> > > Please post the sql statement that creates these tables.
> > >
> > > -r
> > >
> > > At 12:15 AM 5/16/01 -0400, Alex Hochberger wrote:
> > >
> > > >To any SQL wizards out there,
> > > >
> > > >I have finally exhausted my SQL knowledge.
> > > >
> > > >I have 3 tables that I need to do a fancy join on...
> > > >
> > > >1 stores the users
> > > >1 stores the questions
> > > >1 stores the user's answers to the questions (based on
> > > foreign keys to the
> > > >answers table)
> > > >
> > > >I would like to create a result with the following columns:
> > > >some fields from the users, each of the questions
> > > >
> > > >in each row should be the results from the users, and their
> > > user answers
> > > >
> > > >Here is the tricky thing, people may have not answered each
> > > question, so I
> > > >would like to either leave that blank or put in a 0...
> > > >
> > > >With an ugly hack, I get the results where they answered
> > > everything, but not
> > > >the partial answers.
> > > >
> > > >Please cc: me on the reply, because I get this as a digest.
> > > >
> > > >Thanks,
> > > >Alex
> > > >
> > > >---------------------------(end of
> > > broadcast)---------------------------
> > > >TIP 2: you can get off all lists at once with the
> unregister command
> > > >     (send "unregister YourEmailAddressHere" to
> > > majordomo@postgresql.org)
> > > >
> > > >
> > > >
> > > >---
> > > >Incoming mail is certified Virus Free.
> > > >Checked by AVG anti-virus system (http://www.grisoft.com).
> > > >Version: 6.0.251 / Virus Database: 124 - Release Date: 4/26/01
> > >
>
> > ---------------------------(end of
> broadcast)---------------------------
> > TIP 2: you can get off all lists at once with the unregister command
> >     (send "unregister YourEmailAddressHere" to
> majordomo@postgresql.org)
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
>

RE: SQL help...

From
Mike Mascari
Date:
How about:

SELECT users.user_id, questions.question, user_answers.qa_id
FROM users, questions, user_answers
WHERE users.user_id = user_answers.user_id AND
questions.question_id = user_answers.question_id
UNION
SELECT users.user_id, questions.question, '<No Answer>'
FROM users, questions
WHERE NOT EXISTS (
SELECT 1 FROM user_answers
WHERE user_answers.user_id = users.user_id AND
user_answers.question_id = questions.question_id);

You'll get the user, the question, and his answer if an answer
exists. Otherwise, for each user and for each question posed to that
user, you'll get the user, the question, and <No Anwser>. Is that
what you wanted?

Hope that helps,

Mike Mascari
mascarm@mascari.com

-----Original Message-----
From:    Alex Hochberger [SMTP:alex@feratech.com]

Users:
----------------------
CREATE TABLE "users" (
   "user_id" int8 DEFAULT nextval('user_id_seq'::text) NOT NULL,
   "group_id" int4 NOT NULL,
   "user_agent" varchar(200) NOT NULL,
   "ip_address" varchar(20) NOT NULL,
   CONSTRAINT "users_pkey" PRIMARY KEY ("user_id")
);
CREATE  UNIQUE INDEX "user_id_users_ukey" ON "users" ("user_id");
CREATE  INDEX "users_group_id_key" ON "users" ("group_id");
CREATE  INDEX "users_ip_address_key" ON "users" ("ip_address");
CREATE  INDEX "users_user_agent_key" ON "users" ("user_agent");

Questions:
----------------------
CREATE TABLE "questions" (
   "question_id" int8 DEFAULT nextval('question_id_seq'::text) NOT
NULL,
   "survey_id" int4 NOT NULL,
   "question" text NOT NULL,
   CONSTRAINT "questions_pkey" PRIMARY KEY ("question_id")
);
CREATE  INDEX "questions_question_key" ON "questions" ("question");
CREATE  INDEX "questions_survey_id_key" ON "questions" ("survey_id");


User Answers:
----------------------
CREATE TABLE "user_answers" (
   "ua_id" int8 DEFAULT nextval('ua_id_seq'::text) NOT NULL,
   "user_id" int8 NOT NULL,
   "question_id" int8 NOT NULL,
   "qa_id" int8 NOT NULL,
   CONSTRAINT "user_answers_pkey" PRIMARY KEY ("ua_id")
);
CREATE  INDEX "user_answers_qa_id_key" ON "user_answers" ("qa_id");
CREATE  INDEX "user_answers_question_id_key" ON "user_answers"
("question_id");
CREATE  INDEX "user_answers_user_id_key" ON "user_answers"
("user_id");


All these questions will be for survey 1...

Alex


Re: SQL help...

From
Harald Fuchs
Date:
In article <1F3774AB3688D4118B1300508BD9641528A7E0@CHINA>,
Alex Hochberger <alex@feratech.com> writes:

> To any SQL wizards out there,
> I have finally exhausted my SQL knowledge.

> I have 3 tables that I need to do a fancy join on...

> 1 stores the users
> 1 stores the questions
> 1 stores the user's answers to the questions (based on foreign keys to the
> answers table)

> I would like to create a result with the following columns:
> some fields from the users, each of the questions

> in each row should be the results from the users, and their user answers

> Here is the tricky thing, people may have not answered each question, so I
> would like to either leave that blank or put in a 0...

Sounds like a LEFT OUTER JOIN.