gpt4 book ai didi

mysql - 如何将查找表的行放入查询的列中?

转载 作者:行者123 更新时间:2023-11-29 01:45:37 26 4
gpt4 key购买 nike

我有三个表:students、interests 和 interest_lookup。

Students 有 cols student_id 和 name。

兴趣有 cols interest_id 和 interest_name。

Interest_lookup 有 cols student_id 和 interest_id。

找出学生的兴趣是什么

select interests.interest_name from `students`
inner join `interest_lookup`
on interest_lookup.student_id = students.student_id
inner join `interests`
on interests.interest_id = interest_lookup.interest_id

我想做的是得到这样的结果集

student_id | students.name | interest_a | interest_b | ...

其中列名“interest_a”是 interests.name 中的一个值,并且interest_ 列是 0 或 1,这样当值是 1在给定的 interest_lookup 中有一条记录student_id 和 interest_id 没有时为 0。

兴趣表中的每个条目都必须显示为列名。

我可以使用子选择(这非常慢)或进行一堆连接来做到这一点,但这两者都需要我首先从兴趣中选择所有记录并写出一个动态查询。

最佳答案

您正在进行一项称为枢轴的操作。 @Slider345 链接到(在编辑他的答案之前)另一个关于在 Microsoft SQL Server 中执行此操作的 SO 帖子。 Microsoft 有自己的特殊语法来执行此操作,但 MySQL 没有。

你可以这样做:

SELECT s.student_id, s.name,
SUM(i.name = 'a') AS interest_a,
SUM(i.name = 'b') AS interest_b,
SUM(i.name = 'c') AS interest_c
FROM students s
INNER JOIN interest_lookup l USING (student_id)
INNER JOIN interests i USING (interest_id)
GROUP BY s.student_id;

在 MySQL 或 Microsoft 或其他任何软件中,您不能做的是自动填充列,以便数据的存在扩展列的数量。

在您准备查询时,SQL 查询的列必须是固定的和硬编码的

如果您在编写查询代码时不知道兴趣列表,或者您需要它来适应不断变化的兴趣列表,则必须将兴趣作为行获取并在中对这些行进行后处理你的申请。

关于mysql - 如何将查找表的行放入查询的列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7668612/

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