Antw: SQL Question
От | Gerhard Dieringer |
---|---|
Тема | Antw: SQL Question |
Дата | |
Msg-id | s987eace.039@kopo001 обсуждение исходный текст |
Список | pgsql-sql |
>>> Daryl Herzmann <akrherz@iastate.edu> 01.08.2000 22.38 Uhr >>> > Hello, > I hope this question is not too novice for this group. > > I have a table > > portfolio=# \d questions > Table "questions" > Attribute | Type | Modifier > -----------+-------------+----------------------------------------------------- > qid | integer | not null default nextval('questions_qid_seq'::text) > optiona | text | default 'Z' > optionb | text | default 'Z' > optionc | text | default 'Z' > optiond | text | default 'Z' > optione | text | default 'Z' > optionf | text | default 'Z' > optiong | text | default 'Z' > optionh | text | default 'Z' > > > and other table named quizes, which contains references to the > questions. Basically a quiz is composed of up to three questions. > > portfolio=# \d quizes > Table "quizes" > Attribute | Type | Modifier > -----------+-------------+------------------------------------------------------ > quiznum | integer | not null default nextval('quizes_quiznum_seq'::text) > question1 | integer | > question2 | integer | > question3 | integer | > > > > So my question is if I want to querry out a particular quiz and all its > questions and question options, how can I do that in one command. I know > that I could do it with a couple of loops, but I think the SQL is much > more eliquent. Maybe I have my tables incorrectly set up? And > suggestions? > > > Thanks all, > Daryl I suggest to use the following structure: create table quetions (qid integer,optid integer,option text default 'Z'primaray key (q_id,opt_id)); create table quizes (quiznum integer,question integer,primary key (quiznum,question),foreign key (question) referencesquestions(qid)); I hope the syntax is ok, because I didn't check it. Then your query is as simple as: select i.quiznum, i.question, e.optid, e.option from questions e, quizes iwhere i.question = e.qid and i.quiznum = some_quiznum_valueorderby 1,2,3; Of course this has the drawback, that you can't use serials, but you explicitely have to use sequences and set the primarykeys 'by hand'. Gerhard
В списке pgsql-sql по дате отправления: