Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询:需要帮助_Mysql - Fatal编程技术网

Mysql SQL查询:需要帮助

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

我需要帮助来构建结果查询:

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              | 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;
下面是一个完整的解决方案,以及创建测试的代码。 让我们首先创建数据 这是解决办法 最后是输出 那么它是如何工作的/我是如何解决的? 我立刻注意到两件事

  • 前两列看起来很像第一个表。这对我来说是一个重要的提示,第一列可能会在连接中。这听起来很明显,但是。。。好。。。有时候,我们不得不陈述显而易见的事实
  • 最后一列是CatPro的混合。这是一个很大的线索,我需要这两个表的并集,或者涉及这两个表的查询
  • 所以解决办法是这样的

    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-谢谢你的夸奖。如果可以的话,请给我一票。