gpt4 book ai didi

sql - 简单的MySQL问题

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

我正在处理包含人员的 MySQL 数据库。我的问题是,(我将简化以说明我的观点):

我有三个表:

Persons(id int, birthdate date)
PersonsLastNames(id int, lastname varchar(30))
PersonsFirstNames(id int, firstname varchar(30))

id 是公共(public)键。姓氏和名字有单独的表格,因为一个人可以有很多名字和姓氏。

我想进行一个查询,返回所有具有(比方说)一个姓氏的人。如果我去

select birthdate, lastname, firstname from Persons, PersonsLastNames,
PersonsFirstNames where Persons.id = PersonsLastNames.id and
Persons.id = PersonsFirstNames.id and lastName = 'Anderson'

我最终得到了一张像这样的 table

1/1/1970 Anderson Steven //Person 1
1/1/1970 Anderson David //Still Person 1
2/2/1980 Smith Adam //Person 2
3/3/1990 Taylor Ed //Person 3

在展示这个的时候,我希望有

1/1/1970 Anderson Steven David 
2/2/1980 Smith Adam [possibly null?]
3/3/1990 Taylor Ed [possibly null?]

如果需要保存一个人的多个名字或姓氏,我该如何连接表以在结果集中引入新列?

最佳答案

您的应用程序真的需要处理每个人的无限名字/姓氏吗?我不知道您的具体需求,但这似乎有点极端。不管...

由于您实际上不能返回动态数量的列,因此您可以这样做:

SELECT birthdate, lastname, GROUP_CONCAT(firstname SEPARATOR '|') AS firstnames
FROM Persons, PersonsLastNames, PersonsFirstNames
WHERE Persons.id = PersonsLastNames.id
AND Persons.id = PersonsFirstNames.id
GROUP BY Persons.id

这将为每个有姓氏的人返回一行,(无限制)名字由竖线 (|) 符号分隔,GROUP_CONCAT功能。

birthdate             lastname   firstnames
--- --- ---
1970-01-01 00:00:00 Anderson Steven|David
1980-02-02 00:00:00 Smith Adam
1990-03-03 00:00:00 Taylor Ed

关于sql - 简单的MySQL问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1950297/

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