繁体   English   中英

连接两个表,其中table1.id等于table2.table1_id,但仅显示table1.id中在table2.table1_id中找不到的行

[英]Join two tables where table1.id equals table2.table1_id, but only display rows from table1.id that cannot be found in table2.table1_id

我正在建立一个奖项表,提名人可以选择多个奖项类别来申请,并针对他们选择的每个奖项回答一系列问题。

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

问题ID: 1,2,1,...

category_id: 1、3、1,...

答案:答案1,答案2,答案3,...

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

因此,使用上面的示例,我希望看到:

  1. nominee_id 1已应用于award1和award 3
  2. nominee_id 1仍然可以申请裁决2,裁决4,...

编辑:

这是表格,第一个是奖励类别,第二个是答案 这是奖励类别表:

这是答案表

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

我想要的输出是:

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

b)呈现一个仅包含被提名人28尚未进入的类别的下拉菜单。 在这种情况下,奖励类别ID为7-8。

尝试如下查询

查询1

nominee_id 1已应用于award1和award 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 

我假设使用字段,请忽略不需要的字段。

基于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.idNULL或不存在的行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM