Mysql SQL查询:需要帮助
我需要帮助来构建结果查询: Tbl。Main:Mysql SQL查询:需要帮助,mysql,Mysql,我需要帮助来构建结果查询: Tbl。Main: id | Title 205 | Main_A 206 | Main_B 207 | Main_C 208 | Main_D 209 | Main_E 210 | Main_F 211 | Main_G 212 | Main_H id | parent__main_id | Title 401 | 205 | Sub_A 402 | 205 | Sub_B 403 | 207
id | Title
205 | Main_A
206 | Main_B
207 | Main_C
208 | Main_D
209 | Main_E
210 | Main_F
211 | Main_G
212 | Main_H
id | parent__main_id | Title
401 | 205 | Sub_A
402 | 205 | Sub_B
403 | 207 | Sub_C
404 | 209 | Sub_D
405 | 209 | Sub_E
406 | 210 | Sub_F
407 | 211 | Sub_G
408 | 212 | Sub_H
id | parent__sub_id | Title
808 | 401 | Cat_A
809 | 401 | Cat_B
810 | 401 | Cat_C
811 | 401 | Cat_D
812 | 403 | Cat_E
813 | 404 | Cat_F
id | parent__sub_id | Title
920 | 402 | Pro_A
921 | 402 | Pro_B
922 | 405 | Pro_C
923 | 406 | Pro_D
924 | 406 | Pro_E
925 | 406 | Pro_F
Tbl。Sub:
id | Title
205 | Main_A
206 | Main_B
207 | Main_C
208 | Main_D
209 | Main_E
210 | Main_F
211 | Main_G
212 | Main_H
id | parent__main_id | Title
401 | 205 | Sub_A
402 | 205 | Sub_B
403 | 207 | Sub_C
404 | 209 | Sub_D
405 | 209 | Sub_E
406 | 210 | Sub_F
407 | 211 | Sub_G
408 | 212 | Sub_H
id | parent__sub_id | Title
808 | 401 | Cat_A
809 | 401 | Cat_B
810 | 401 | Cat_C
811 | 401 | Cat_D
812 | 403 | Cat_E
813 | 404 | Cat_F
id | parent__sub_id | Title
920 | 402 | Pro_A
921 | 402 | Pro_B
922 | 405 | Pro_C
923 | 406 | Pro_D
924 | 406 | Pro_E
925 | 406 | Pro_F
待定。Cat和Pro由Tbl支持。分:
Tbl。猫:
id | Title
205 | Main_A
206 | Main_B
207 | Main_C
208 | Main_D
209 | Main_E
210 | Main_F
211 | Main_G
212 | Main_H
id | parent__main_id | Title
401 | 205 | Sub_A
402 | 205 | Sub_B
403 | 207 | Sub_C
404 | 209 | Sub_D
405 | 209 | Sub_E
406 | 210 | Sub_F
407 | 211 | Sub_G
408 | 212 | Sub_H
id | parent__sub_id | Title
808 | 401 | Cat_A
809 | 401 | Cat_B
810 | 401 | Cat_C
811 | 401 | Cat_D
812 | 403 | Cat_E
813 | 404 | Cat_F
id | parent__sub_id | Title
920 | 402 | Pro_A
921 | 402 | Pro_B
922 | 405 | Pro_C
923 | 406 | Pro_D
924 | 406 | Pro_E
925 | 406 | Pro_F
Tbl。专业人士:
id | Title
205 | Main_A
206 | Main_B
207 | Main_C
208 | Main_D
209 | Main_E
210 | Main_F
211 | Main_G
212 | Main_H
id | parent__main_id | Title
401 | 205 | Sub_A
402 | 205 | Sub_B
403 | 207 | Sub_C
404 | 209 | Sub_D
405 | 209 | Sub_E
406 | 210 | Sub_F
407 | 211 | Sub_G
408 | 212 | Sub_H
id | parent__sub_id | Title
808 | 401 | Cat_A
809 | 401 | Cat_B
810 | 401 | Cat_C
811 | 401 | Cat_D
812 | 403 | Cat_E
813 | 404 | Cat_F
id | parent__sub_id | Title
920 | 402 | Pro_A
921 | 402 | Pro_B
922 | 405 | Pro_C
923 | 406 | Pro_D
924 | 406 | Pro_E
925 | 406 | Pro_F
我希望得到以下输出:
205 | Main_A | 401 | Sub_A | 808 | Cat_A
205 | Main_A | 401 | Sub_A | 809 | Cat_B
205 | Main_A | 401 | Sub_A | 810 | Cat_C
205 | Main_A | 401 | Sub_A | 811 | Cat_D
205 | Main_A | 402 | Sub_B | 920 | Pro_A
205 | Main_A | 402 | Sub_B | 921 | Pro_B
206 | Main_B | NULL | NULL | NULL | NULL
207 | Main_C | 403 | Sub_C | 812 | Cat_E
208 | Main_D | NULL | NULL | NULL | NULL
209 | Main_E | 404 | Sub_D | 813 | Cat_F
209 | Main_E | 405 | Sub_E | 922 | Pro_C
209 | Main_F | 406 | Sub_F | 923 | Pro_D
209 | Main_F | 406 | Sub_F | 924 | Pro_E
210 | Main_F | 406 | Sub_F | 925 | Pro_F
211 | Main_G | 407 | Sub_G | NULL | NULL
212 | Main_H | 408 | Sub_H | NULL | NULL
有人能帮我吗?谢谢
刚铎这应该可以:
SELECT m.id AS mid,
m.Title AS mtitle,
s.id AS sid,
s.Title AS stitle,
c.id AS cid,
c.Title AS ctitle
FROM Main m
JOIN Sub s
ON m.id == s.parent__main_id
JOIN Cat c
ON s.id == c.parent__sub_id
JOIN Pro p
ON s.id == p.parent__sub_id;
看起来您需要将
Cat
和Pro
表的标题列附加在同一结果列中,在这种情况下,您可以使用两个查询,分别使用左连接
和联合
它们,例如:
SELECT m.id, m.title, s.id, s.title, c.id, c.title
FROM Main m LEFT JOIN Sub s ON m.id = s.parent_main_id
LEFT JOIN Cat c ON s.id = c.parent_sub_id
UNION
SELECT m.id, m.title, s.id, s.title, p.id, p.title
FROM Main m LEFT JOIN Sub s ON m.id = s.parent_main_id
LEFT JOIN Pro p ON s.id = p.parent_sub_id
这将为您提供所需的结果,但不是按主ID的顺序。如果希望对结果进行排序,则可以将此查询包装到另一个查询中,并应用排序依据,例如:
SELECT a.*
FROM (
SELECT m.id, m.title, s.id, s.title, c.id, c.title
FROM Main m LEFT JOIN Sub s ON m.id = s.parent_main_id
LEFT JOIN Cat c ON s.id = c.parent_sub_id
UNION
SELECT m.id, m.title, s.id, s.title, p.id, p.title
FROM Main m LEFT JOIN Sub s ON m.id = s.parent_main_id
LEFT JOIN Pro p ON s.id = p.parent_sub_id
) a
ORDER BY a.id;
下面是一个完整的解决方案,以及创建测试的代码。
让我们首先创建数据
这是解决办法
最后是输出
那么它是如何工作的/我是如何解决的?
我立刻注意到两件事
Tbl_Main join ( Tbl_Cat Union Tbl_Pro )
但是,在连接Tbl_Main到Tbl_Cat或Tbl_Pro的引用时,缺少了一些东西,这就是Tbl_Sub
这就是解决方案:
Tbl_Main join ( ( Tbl_Sub join Tbl_Cat ) Union ( Tbl_Sub join Tbl_Pro ) )
干杯 请参见搜索
左连接
您应该为标题
使用别名,因为多个标题
将overwrite@gondor-谢谢你的夸奖。如果可以的话,请给我一票。