Mysql左连接表2,其中来自表3的字段
表媒体Mysql左连接表2,其中来自表3的字段,mysql,Mysql,表媒体 id, options 1 a 2 b 3 c 表格地图 id, title, type 1 f x 2 g x 3 h y 4 z x 4 w y 表媒体地图 maps_id media_id 1 2 2 3 我正在尝试从表介质中选择所有数据并连接表映射。每个媒体可以包含多个地图 SELECT media_t.id, media_t.options
id, options
1 a
2 b
3 c
表格地图
id, title, type
1 f x
2 g x
3 h y
4 z x
4 w y
表媒体地图
maps_id media_id
1 2
2 3
我正在尝试从表介质中选择所有数据并连接表映射。每个媒体可以包含多个地图
SELECT media_t.id, media_t.options,
GROUP_CONCAT(CASE WHEN maps_t.type = 'x' THEN maps_t.title END ORDER BY maps_t.title SEPARATOR ', ') as x,
GROUP_CONCAT(CASE WHEN maps_t.type = 'y' THEN maps_t.title END ORDER BY maps_t.title SEPARATOR ', ') as y
FROM media_table as media_t
LEFT JOIN maps_table as maps_t
ON media_t.id = (
SELECT maps_id FROM {table_media_maps}
WHERE media_id = maps_t.id
)
GROUP BY media_t.id
如果你需要加入3个tbals,你可以试试
SELECT me.id, me.options,
GROUP_CONCAT(CASE WHEN ma.type = 'x' THEN ma.title END ORDER BY ma.title SEPARATOR ', ') as x,
GROUP_CONCAT(CASE WHEN ma.type = 'y' THEN ma.title END ORDER BY ma.title SEPARATOR ', ') as y
FROM media as me
LEFT JOIN media_maps mm on me-id = mm.media_id
LEFT JOIN maps ma ON mm.maps_id = ma.id
GROUP BY me.id
无论如何,您的数据都不是完整的。 我为maps表设置了一个右连接,这样您就可以看到它是有效的,很可能您希望还有一个左连接,但是您仍然需要连接所有三个表
DBFIDLE您的解决方案和scaisEdge解决方案有什么区别?他的解决方案不会显示第一行,因为右连接获取所有数据并尝试将其与其余数据连接起来,elsw这与你所看到的解决方案相同,只是观察到右连接非常罕见,但我不介意,当我测试我的查询时,我发现数据不完整,并且根本没有显示组连接,所以我构建了它,只是为了看看,但我提到他可能想要左连接
CREATE TABLE media_table (
`id` INTEGER,
`options` VARCHAR(1)
);
INSERT INTO media_table
(`id`, `options`)
VALUES
('1', 'a'),
('2', 'b'),
('3', 'c');
CREATE TABLE table_media_maps (
`maps_id` INTEGER,
`media_id` INTEGER
);
INSERT INTO table_media_maps
(`maps_id`, `media_id`)
VALUES
('1', '2'),
('2', '3');
CREATE TABLE maps_table (
`id` INTEGER,
`title` VARCHAR(1),
`type` VARCHAR(1)
);
INSERT INTO maps_table
(`id`, `title`, `type`)
VALUES
('1', 'f', 'x'),
('2', 'g', 'x'),
('3', 'h', 'y'),
('4', 'z', 'x'),
('4', 'w', 'y');
SELECT media_t.id, media_t.options,
GROUP_CONCAT(
CASE WHEN maps_t.type = 'x' THEN maps_t.title END
ORDER BY maps_t.title SEPARATOR ', ')
as x,
GROUP_CONCAT(
CASE WHEN maps_t.type = 'y' THEN maps_t.title END
ORDER BY maps_t.title SEPARATOR ', ')
as y
FROM media_table as media_t
LEFT JOIN table_media_maps m_m_t ON media_t.id = m_m_t.media_id
right JOIN maps_table as maps_t
ON maps_t.id = m_m_t.maps_id
GROUP BY media_t.id, media_t.options
id | options | x | y
---: | :------ | :- | :---
null | null | z | h, w
2 | b | f | null
3 | c | g | null