gpt4 book ai didi

mysql - 连接多个表时删除重复行 - Mysql

转载 作者:行者123 更新时间:2023-11-29 09:49:09 24 4
gpt4 key购买 nike

媒体

id  | title   | ...
1 | a song |
2 | a video |

媒体设置

media_id  | setting_id  | chosen_option
1 | 1 | 2
1 | 2 | 3
2 | 1 | 1
2 | 2 | 4

所以我有一个媒体表,其中包含有关用户上传的媒体文件的各种信息,它们有两个设置1.privacy(选项1用于公共(public),选项2用于私有(private))2。年龄安全(选项3适用于所有人,选项4仅适用于成人)。现在,当用户(成人)搜索媒体时,假设标题以 a.... 开头。

这是我的查询:

SELECT 
m.id AS media_id, m.title AS media_title,
ms.setting_id AS setting, ms.chosen_option as opt
FROM media m
LEFT JOIN media_setting ms ON m.id = ms.media_id
WHERE m.title LIKE 'a%'

并且它会给我一个输出,其中一行有重复的行,其中每个设置都是我不想要的。

所以我想要的是:

media_id  |  media_title  | setting_1  | option_for_1 |  setting_2 | option_for_2

1 | a song | 1 | 2 | 2 | 3
2 | a video | 1 | 1 | 2 | 4

我怎样才能实现这个目标?谢谢。

最佳答案

根据评论,我会坚持使用您得到的查询,并解决应用程序代码中的显示问题。

但无论如何,这是 sql 中的标准(且非动态)方法...

CREATE TABLE media
(id SERIAL PRIMARY KEY
,title VARCHAR(20) NOT NULL
);

INSERT INTO media VALUES
(1,'a song'),
(2,'a video');

DROP TABLE IF EXISTS media_setting;

CREATE TABLE media_setting
(media_id INT NOT NULL
,setting_id INT NOT NULL
,chosen_option INT NOT NULL
,PRIMARY KEY(media_id,setting_id)
);

INSERT INTO media_setting VALUES
(1,1,2),
(1,2,3),
(2,1,1),
(2,2,4);

SELECT m.*
, MAX(CASE WHEN s.setting_id = 1 THEN chosen_option END) option_for_1
, MAX(CASE WHEN s.setting_id = 2 THEN chosen_option END) option_for_2
FROM media m
LEFT
JOIN media_setting s
ON s.media_id = m.id
GROUP
BY m.id;

+----+---------+--------------+--------------+
| id | title | option_for_1 | option_for_2 |
+----+---------+--------------+--------------+
| 1 | a song | 2 | 3 |
| 2 | a video | 1 | 4 |
+----+---------+--------------+--------------+

关于mysql - 连接多个表时删除重复行 - Mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55143769/

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