我正在建立奖励表格,被提名者可以选择多个奖项类别申请,并为他们所选择的每个奖项回答一系列问题。
我有2张桌子。
first table
包含奖项的奖项类别:
id: 1,2,3,...
名称: award1,award2,award3,....
second table
包含被提名人ID,问题ID和奖励类别的答案:
id:
answer_id: 1,2,3,...
nominee_id: 1,1,2,......
question_id: 1,2,1,......
category_id: 1,3,1,......
回答:回答1,回答2,回答3,...
我需要的是一个查询,可以显示被提名人已经提交答案的奖项类别,以及第二个查询,该查询可以显示仍可供被提名人申请的奖励类别。
所以使用上面的例子,我想看看:
编辑:
以下是表格,第一个是奖项类别,第二个是答案
如您所见,ID为28的被提名者共回答了16个问题,每个奖项类别8个,ID为5和6。
我想要的输出是:
a)显示提名人28已输入的类别的名称。在这种情况下,品牌参与度(ID:5)和企业社会企业(ID:6)
b)渲染一个下拉菜单,其中只包含提名者28尚未输入的类别。在这种情况下,奖项类别ID为7-8。
答案 0 :(得分:0)
尝试查询如下
<强>查询-1 强>
nominee_id 1已经申请获奖1和奖励3
select table1.*,table2.nominee_id,table2.answer_id,table2.question_id,
table2.category_id,table2.answer from table1
inner join table2 on table1.id = table2.category_id
<强>查询-2 强>
nominee_id 1仍然可以申请奖励2,奖励4,......
select table1.*,table2.nominee_id,table2.answer_id,table2.question_id,
table2.category_id,table2.answer from table1
inner join table2 on table1.id <> table2.category_id
我已假设字段,请忽略不需要的字段。
答案 1 :(得分:0)
基于Sameer的回答,我建议:
首次查询(参与的类别;与Sameer的实际相同)
SELECT table1.*, table2.nominee_id, table2.answer_id, table2.question_id, table2.category_id, table2.answer
FROM table1
JOIN table2 ON table2.category_id = table1.id
第二次查询(没有参与的类别;减少“噪音”)
SELECT table1.*
FROM table1
LEFT JOIN table2 ON table2.category_id = table1.id
WHERE table2.category_id IS NULL
第二个查询使用LEFT JOIN
的工作方式:如果在table2中找不到匹配的行,则结果中的所有列都设置为NULL
。根据加入条件,如果table2.category_id = table1.id
为table2.category_id
或者没有行,则NULL
table1.id
只能NULL
。