我有三张桌子。
项目
Project ID | Project Name
1 | Project 1
2 | Project 2
增强功能
Enh ID | Enh Name | Project ID
1 | Enh Name 1 | 1
2 | Enh Name 2 | 1
3 | Enh Name 3 | 2
支持表
Supp. ID | Supp. Proj Name | Project ID
1 | Supp Name 1 | 1
2 | Supp Name 2 | 2
3 | Supp Name 3 | 2
我想创建一个查询表,列出所有项目及其相关的Enh。项目和支持项目。我使用了连接,但结果包含支持表中的重复列,这对报告来说非常混乱。
答案 0 :(得分:2)
我相信你想使用union all
。这可能是一个开始:
select
'Enhancement: ' type_,
p.name,
e.name
from
project p,
enhancement e
where
p.id =
e.project_id
UNION ALL
select
'Support: ' type_,
p.name,
s.name
from
project p,
support s
where
p.id =
s.project_id;
我的提案背景:
我相信原始海报想要避免的是以下重复
select
p.name,
e.name,
s.name
from
project p,
enhancement e,
support s
where
p.id = e.project_id and
p.id = s.project_id ;
结果
NAME NAME NAME
--------------- --------------- ---------------
Project one Enhancement 2 Support 1
Project one Enhancement 1 Support 1
Project two Enhancement 3 Support 2
Project two Enhancement 3 Support 3
即:增强功能3 和支持1 两次返回,这可能是(可能)不需要的。
但是,根据我的建议,查询返回
TYPE_ NAME NAME
------------- --------------- ---------------
enhancement: Project one Enhancement 1
enhancement: Project one Enhancement 2
enhancement: Project two Enhancement 3
support: Project one Support 1
support: Project two Support 2
support: Project two Support 3
也就是说,每个增强和支持案例只返回一次。
我选择UNION ALL
代替UNION
,以便RDBMS不必执行额外的步骤来过滤掉重复的记录(我认为这不是必需的)。
答案 1 :(得分:0)
我认为你正在寻找别名
尝试这样的事情:
select p.name as project_name1, // the 'as' might be superfluous ... not sure right now
e.name as enhancement_name1
from project as p, enhancement as e // whataver the desired jon condition is
where p.id = e.project_id
答案 2 :(得分:0)
如果您可以解释表格的关系,它会有所帮助。在我看来,好像每个项目可能都有相关的增强项目和/或相关的支持项目。如果我理解正确,那么下面的内容就可以了。
SELECT
p.ProjectID,
p.ProjectName,
e.EnhName,
s.SuppProjName
FROM
Project p
LEFT JOIN EnhanchementPJT e ON p.ProjectID = e.ProjectID
LEFT JOIN SupportTable s ON p.ProjectID = s.ProjectID