gpt4 book ai didi

sql - 一对多查询sql

转载 作者:搜寻专家 更新时间:2023-10-30 22:35:25 26 4
gpt4 key购买 nike

好吧,我有两个表,第一个是员工表,第二个是电子邮件表,我想查看员工及其所有电子邮件

table employees:
id | name | idE
1 | name1 | 1
2 | name2 | 2
3 | name3 | 3

table email:
id | idE | email
1 | 1 | e1@email.com
2 | 1 | e2@email.com
3 | 2 | e@email2.com
4 | 3 | e@email3.com

我有这个问题:

select e.id, e.name, m.email from employees as e inner join email as m on p.idE = m.idE

这是结果:

id | name  | email
1 | name1 | e1@email.com
1 | name1 | e2@email.com
2 | name2 | e@email2.com
3 | name3 | e@email3.com

我不需要员工 1 两次我只需要同一行中的两封电子邮件

大家好,我将查询修改为:选择 em.name,东西((从 tbl_Employees 选择 ',' + e.Email as m inner join tbl_Email as e on m.idE = e.idE for xml path('')),1,1,'') 作为电子邮件来自 tbl_employees 作为 em

但现在我的问题是我在电子邮件的每一列中都得到了这个:

e1@email.com,e2@email.com,e@email2.com,e@email3.com,

我怎样才能只获取每个员工的电子邮件?

而不是每一列中都有每一封电子邮件

例如:

name | email
name1 | e1@email.com,e2@email.com,
name2 | e@email2.com,
name3 | e@email3.com,

pd: 对不起,如果我有一些错误,我还在学习英语

最佳答案

虽然您的要求是可能的,而且我相信您会得到几个答案,但您的问题是一个很好的例子,说明小心您的愿望!您要求 DBMS 提供一些表示级功能。通常最好让 SQL 查找您需要的数据,并处理应用程序中的表示问题。

SELECT 返回一个信息表,一行中每一列的值通常是“原子的”,因为它包含 SQL 可以与其他值进行比较的单个值。如果数据库中的表遵守 first normal form,则它们具有相同的属性。 .

SQL 的优点之一是“一切皆表”:您可以将 SELECT 一个堆叠在另一个之上。

select * from (select a, b from T where a > b) as Z

每个内部的都会产生另一个表,下一个外部的可以对其进行操作。

group_concat 等函数(作为示例)生成非原子列。从那里只需一小步就可以编写如下代码:

select * from ( select group_concat(a) as a_list from T ) as Z
where a_list like '%Henry%'

程序员被迫搜索字符串而不是直接比较。查询变得不那么精确,因此容易出错。

在您的示例中,故障安全方法是从 DBMS 中一个一个地读取结果,并通过观察 idE 列连接每个用户的地址列表。它将使您的查询更简单,如果您以后决定以另一种方式呈现它们,您可以在不深入研究数据库逻辑的情况下做到这一点。

关于sql - 一对多查询sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38086840/

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