加入两个表,其中table1.id等于table2.table1_id,但只显示table1.id中无法在table2.table1_id中找到的行

时间:2014-04-14 06:28:34

标签: php mysql join

我正在建立奖励表格,被提名者可以选择多个奖项类别申请,并为他们所选择的每个奖项回答一系列问题。

我有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,...

我需要的是一个查询,可以显示被提名人已经提交答案的奖项类别,以及第二个查询,该查询可以显示仍可供被提名人申请的奖励类别。

所以使用上面的例子,我想看看:

  1. nominee_id 1已经申请获奖1和奖励3
  2. nominee_id 1仍然可以申请奖励2,奖励4,......
  3. 编辑:

    以下是表格,第一个是奖项类别,第二个是答案 Here's the award categories table:

    Here's the answers table

    如您所见,ID为28的被提名者共回答了16个问题,每个奖项类别8个,ID为5和6。

    我想要的输出是:

    a)显示提名人28已输入的类别的名称。在这种情况下,品牌参与度(ID:5)和企业社会企业(ID:6)

    b)渲染一个下拉菜单,其中只包含提名者28尚未输入的类别。在这种情况下,奖项类别ID为7-8。

2 个答案:

答案 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.idtable2.category_id或者没有行,则NULL table1.id只能NULL