当表具有唯一值时,查询是否显示重复项?

时间:2017-05-31 16:35:07

标签: mysql sql database

我正在学习SQL并试图弄清楚如何将3个表中的数据合并到一个查询中。我有3个表TASK,PROJECT和PRIORITY_TYPE。

TASK使用唯一编号task_id列出数据库中的所有任务,project_id表示任务对应的项目,priority_type_id是表示另一个表中的紧急程度的编号。

PROJECT是已完成或未完成的所有项目的列表。

PRIORTY_TYPE将所有priority_type_id列为具有表示紧急程度的相应priority_type_name的数字。每个项目的数字都不同(1个项目中的URGENT与另一个项目中的URGENT没有相同的priority_type_id)。我想选择不完整/正在进行的项目的所有任务及其相应的紧急情况。我目前有查询

rails start

这将显示来自不完整/正在进行的项目的所有任务及其唯一的task_id,它们对应的项目以及要在PRIORITY_TYPE中查找的priority_id的数量。

但是,我还想在select中的PRIORITY_TYPE表中包含priority_type_name。我的尝试看起来像以下查询:

rails restart

但是,这会产生重复任务,重复task_id但不同的priority_type_name,即使每个task_id只在TASK中出现一次。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

那是因为它做笛卡尔产品。未定义连接键。

查询应该是这样的:

SELECT task.task_id, task.project_id task.priority_type_id, priority_type.priority_type_name
FROM task, priority_type 
WHERE task.project_id IN (SELECT project_id FROM project WHERE completion < 100)
and task.project_id = priority_type.project_id

答案 1 :(得分:0)

使用inner join代替:

select
    task.task_id
  , task.project_id
  , task.priority_type_id
  , priority_type.priority_type_name
from task 
  inner join priority_type 
    on task.priority_type_id = priority_type.priority_type_id
where task.project_id in (select project_id from project where completion < 100)