gpt4 book ai didi

一个特定字段没有重复值的 SQL Union

转载 作者:行者123 更新时间:2023-11-29 12:05:53 25 4
gpt4 key购买 nike

有 3 个表DEVELOPERMANAGERPROJECT:

create table DEVELOPER(id int(4), lastname varchar(40), project_id int(4));

create table MANAGER(id int(4), lastname varchar(40), project_id int(4));

create table PROJECT(id int(4), name varchar(40));

PROJECT和DEVELOPER是一对多的关系,PROJECT和MANAGER是一对一的关系。

数据库中存储的所有姓氏都是唯一的。经理可以同时是同一项目的开发人员。 (在这种情况下,他的数据存储在两个表中)。

我想从我的数据库中接收特定项目的所有开发人员和经理的列表,格式如下:

编号 | 姓氏 | 是管理器

我认为它适合以下查询:

SELECT id, lastname, false AS isManager FROM developer WHERE project_id = 314
UNION
SELECT id, lastname true AS isManager FROM manager WHERE project_id = 314

但如果他也是特定项目的开发人员,我不希望有两行经理的数据!我想离开属性 isManager 为真的那一行。请建议我正确的查询来解决这个问题!

最佳答案

您可以利用 FULL OUTER JOIN为此目的:

SELECT COALESCE(m.id, d.id) AS id  -- m comes first!
, lastname -- lastname consolidated by USING
, CASE WHEN m.id IS NOT NULL THEN TRUE ELSE FALSE END AS is_manager
FROM developer d
FULL OUTER JOIN manager m USING (lastname, project_id)
WHERE project_id = 314;

但首先你可能会考虑 @a_horse_with_no_name's advice关于您的数据库设计。

关于一个特定字段没有重复值的 SQL Union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16496462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com