Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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
Php 将2个内部联接结果联接为一个结果_Php_Mysql_Sql_Join_Mysqli - Fatal编程技术网

Php 将2个内部联接结果联接为一个结果

Php 将2个内部联接结果联接为一个结果,php,mysql,sql,join,mysqli,Php,Mysql,Sql,Join,Mysqli,每个人我都有问题。我有两个查询,分别运行良好。但我想提出一个我已经尝试过的问题,但这些都不起作用。我需要连接两个输出 第一次查询: SELECT q_internal_table.q_part_id, q_external_table.q_external_id, q_external_table.q_external_approve, q_external_table.q_order_id, q_internal_table.q_internal_id,

每个人我都有问题。我有两个查询,分别运行良好。但我想提出一个我已经尝试过的问题,但这些都不起作用。我需要连接两个输出

第一次查询:

SELECT q_internal_table.q_part_id, 
   q_external_table.q_external_id, 
   q_external_table.q_external_approve, 
   q_external_table.q_order_id, 
   q_internal_table.q_internal_id, 
   q_internal_table.q_internal_approve 
   FROM   (SELECT parts.id                  AS q_part_id, 
           parts.order_id            AS q_order_id, 
           external_reports.id       AS q_external_id, 
           external_reports.approved AS q_external_approve 
    FROM   parts 
           INNER JOIN external_reports 
                   ON( parts.id = external_reports.part_id )) 
   q_external_table 
   INNER JOIN (SELECT parts.id                  AS q_part_id, 
                      internal_reports.id       AS q_internal_id, 
                      internal_reports.approved AS q_internal_approve 
               FROM   parts 
                      INNER JOIN internal_reports 
                              ON( parts.id = internal_reports.part_id )) 
          q_internal_table 
           ON( q_external_table.q_part_id = q_internal_table.q_part_id ) 
   WHERE  ( q_external_table.q_external_approve = 'Y' 
      OR q_internal_table.q_internal_approve = 'Y' ) 
第二次查询:

SELECT q_five_internal_table.q_five_part_id,
   q_five_internal_table.q_five_internal_id, 
   q_five_internal_table.q_five_internal_approve,
   q_five_external_table.q_five_external_id, 
   q_five_external_table.q_five_external_approve, 
   q_five_external_table.q_five_order_id
   FROM   (SELECT parts.id                  AS q_five_part_id, 
           parts.order_id            AS q_five_order_id, 
           five_way_external_reports.id       AS q_five_external_id, 
           five_way_external_reports.approved AS q_five_external_approve 
    FROM   parts 
           INNER JOIN five_way_external_reports 
                   ON( parts.id = five_way_external_reports.part_id )) 
   q_five_external_table 
   INNER JOIN (SELECT parts.id                  AS q_five_part_id, 
                      five_way_internal_reports.id       AS q_five_internal_id, 
                      five_way_internal_reports.approved AS q_five_internal_approve 
               FROM   parts 
                      INNER JOIN five_way_internal_reports 
                              ON( parts.id = five_way_internal_reports.part_id )) 
          q_five_internal_table 
           ON( q_five_external_table.q_five_part_id = q_five_internal_table.q_five_part_id ) 
  WHERE  ( q_five_external_table.q_five_external_approve = 'Y' 
      OR q_five_internal_table.q_five_internal_approve = 'Y' ) 
第一次查询结果:

第二次查询结果:

我尝试过这个查询:-

SELECT q_internal_external_table.*, 
   q_five_internal_external_table.* 
FROM   (SELECT q_internal_table.q_part_id, 
           q_external_table.q_external_id, 
           q_external_table.q_external_approve, 
           q_external_table.q_order_id, 
           q_internal_table.q_internal_id, 
           q_internal_table.q_internal_approve 
    FROM  (SELECT parts.id                  AS q_part_id, 
                  parts.order_id            AS q_order_id, 
                  external_reports.id       AS q_external_id, 
                  external_reports.approved AS q_external_approve 
           FROM   parts 
                  INNER JOIN external_reports 
                          ON( parts.id = external_reports.part_id )) 
          q_external_table 
          INNER JOIN (SELECT parts.id                  AS q_part_id, 
                             internal_reports.id       AS q_internal_id, 
                             internal_reports.approved AS q_internal_approve 
                      FROM   parts 
                             INNER JOIN internal_reports 
        ON( parts.id = internal_reports.part_id )) 
        q_internal_table 
       ON( q_external_table.q_part_id = q_internal_table.q_part_id ) 
       WHERE  ( q_external_table.q_external_approve = 'Y' 
       OR q_internal_table.q_internal_approve = 'Y' )) 
       q_internal_external_table 
       INNER JOIN (SELECT q_five_internal_table.q_five_part_id, 
       q_five_internal_table.q_five_internal_id, 
       q_five_internal_table.q_five_internal_approve, 
       q_five_external_table.q_five_order_id, 
       q_five_external_table.q_five_external_id, 
       q_five_external_table.q_five_external_approve 
       FROM   (SELECT parts.id                           AS q_five_part_id, 
       parts.order_id                     AS 
       q_five_order_id 
       , 
      five_way_external_reports.id       AS 
       q_five_external_id, 
       five_way_external_reports.approved AS 
       q_five_external_approve 
       FROM   parts 
       INNER JOIN five_way_external_reports 
       ON( parts.id = five_way_external_reports.part_id )) 
       q_five_external_table 
       INNER JOIN (SELECT parts.id  AS     q_five_part_id, 
       five_way_internal_reports.id       AS 
       q_five_internal_id, 
       five_way_internal_reports.approved AS 
       q_five_internal_approve 
       FROM   parts 
       INNER JOIN five_way_internal_reports 
       ON( parts.id = five_way_internal_reports.part_id )) 
       q_five_internal_table 
       ON ( q_five_external_table.q_five_part_id = 
       q_five_internal_table.q_five_part_id ) 
       WHERE  ( q_five_external_table.q_five_external_approve = 'Y' 
       OR q_five_internal_table.q_five_internal_approve = 'Y' )) 
       q_five_internal_external_table 
       ON ( q_internal_external_table.q_part_id = 
       q_five_internal_external_table.q_five_part_id ) 
查询结果:- 在这个查询中有三个结果。但是我希望7的结果和第一个查询结果一样。这三个答案已经出现在第一个查询结果中。我也需要休息。我认为问题出在q_internal_external_table.q_part_id=q_five_internal_external_table.q_five_part_id上的
。但我不知道如何解决它


请帮帮我。提前谢谢。

您需要的是
工会

两个查询都需要具有相同的金额列和类型。在您的情况下,您需要更改所选列的顺序,以便使
联合

应该是这样的:

SELECT q_internal_table.q_part_id, 
   q_external_table.q_external_id, 
   q_external_table.q_external_approve, 
   q_external_table.q_order_id, 
   q_internal_table.q_internal_id, 
   q_internal_table.q_internal_approve 
   FROM   (SELECT parts.id AS q_part_id, 
           parts.order_id AS q_order_id, 
           external_reports.id AS q_external_id, 
           external_reports.approved AS q_external_approve 
    FROM parts 
           INNER JOIN external_reports 
                   ON( parts.id = external_reports.part_id )) 
   q_external_table 
   INNER JOIN (SELECT parts.id AS q_part_id, 
                      internal_reports.id AS q_internal_id, 
                      internal_reports.approved AS q_internal_approve 
               FROM   parts 
                      INNER JOIN internal_reports 
                              ON( parts.id = internal_reports.part_id )) 
          q_internal_table 
           ON( q_external_table.q_part_id = q_internal_table.q_part_id ) 
   WHERE  ( q_external_table.q_external_approve = 'Y' 
      OR q_internal_table.q_internal_approve = 'Y' )

UNION ALL 

SELECT q_five_internal_table.q_five_part_id,
      q_five_external_table.q_five_external_id,
      q_five_external_table.q_five_external_approve, 
      q_five_external_table.q_five_order_id,
   q_five_internal_table.q_five_internal_id, 
   q_five_internal_table.q_five_internal_approve   
   FROM   (SELECT parts.id AS q_five_part_id, 
           parts.order_id AS q_five_order_id, 
           five_way_external_reports.id AS q_five_external_id, 
           five_way_external_reports.approved AS q_five_external_approve 
    FROM   parts 
           INNER JOIN five_way_external_reports 
                   ON( parts.id = five_way_external_reports.part_id )) 
   q_five_external_table 
   INNER JOIN (SELECT parts.id AS q_five_part_id, 
                      five_way_internal_reports.id AS q_five_internal_id, 
                      five_way_internal_reports.approved AS q_five_internal_approve 
               FROM parts 
                      INNER JOIN five_way_internal_reports 
                              ON( parts.id = five_way_internal_reports.part_id )) 
          q_five_internal_table 
           ON( q_five_external_table.q_five_part_id = q_five_internal_table.q_five_part_id ) 
  WHERE  ( q_five_external_table.q_five_external_approve = 'Y' 
      OR q_five_internal_table.q_five_internal_approve = 'Y' ) 

请注意,我已经更改了第二个查询中列的顺序,以匹配第一个查询的类型。

您需要的是
UNION

两个查询都需要具有相同的金额列和类型。在您的情况下,您需要更改所选列的顺序,以便使
联合

应该是这样的:

SELECT q_internal_table.q_part_id, 
   q_external_table.q_external_id, 
   q_external_table.q_external_approve, 
   q_external_table.q_order_id, 
   q_internal_table.q_internal_id, 
   q_internal_table.q_internal_approve 
   FROM   (SELECT parts.id AS q_part_id, 
           parts.order_id AS q_order_id, 
           external_reports.id AS q_external_id, 
           external_reports.approved AS q_external_approve 
    FROM parts 
           INNER JOIN external_reports 
                   ON( parts.id = external_reports.part_id )) 
   q_external_table 
   INNER JOIN (SELECT parts.id AS q_part_id, 
                      internal_reports.id AS q_internal_id, 
                      internal_reports.approved AS q_internal_approve 
               FROM   parts 
                      INNER JOIN internal_reports 
                              ON( parts.id = internal_reports.part_id )) 
          q_internal_table 
           ON( q_external_table.q_part_id = q_internal_table.q_part_id ) 
   WHERE  ( q_external_table.q_external_approve = 'Y' 
      OR q_internal_table.q_internal_approve = 'Y' )

UNION ALL 

SELECT q_five_internal_table.q_five_part_id,
      q_five_external_table.q_five_external_id,
      q_five_external_table.q_five_external_approve, 
      q_five_external_table.q_five_order_id,
   q_five_internal_table.q_five_internal_id, 
   q_five_internal_table.q_five_internal_approve   
   FROM   (SELECT parts.id AS q_five_part_id, 
           parts.order_id AS q_five_order_id, 
           five_way_external_reports.id AS q_five_external_id, 
           five_way_external_reports.approved AS q_five_external_approve 
    FROM   parts 
           INNER JOIN five_way_external_reports 
                   ON( parts.id = five_way_external_reports.part_id )) 
   q_five_external_table 
   INNER JOIN (SELECT parts.id AS q_five_part_id, 
                      five_way_internal_reports.id AS q_five_internal_id, 
                      five_way_internal_reports.approved AS q_five_internal_approve 
               FROM parts 
                      INNER JOIN five_way_internal_reports 
                              ON( parts.id = five_way_internal_reports.part_id )) 
          q_five_internal_table 
           ON( q_five_external_table.q_five_part_id = q_five_internal_table.q_five_part_id ) 
  WHERE  ( q_five_external_table.q_five_external_approve = 'Y' 
      OR q_five_internal_table.q_five_internal_approve = 'Y' ) 

请注意,我已更改了第二个查询中列的顺序,以匹配第一个查询的类型。

如果我们假设查询的最终目标是在下表中查找parts.id,则更新后的查询似乎是正确的(语义上): 外部报告、内部报告、五向外部报告、五向内部报告

在组合查询1和查询2的行时使用Union

但是,如果您试图查找匹配的列(join子句),则将使用join和not UNION


此外,请尝试解释并解释查询的扩展前缀,以了解查询计划。

如果我们假设查询的最终目标是在下表中查找parts.id,则您更新的查询似乎是正确的(语义上): 外部报告、内部报告、五向外部报告、五向内部报告

在组合查询1和查询2的行时使用Union

但是,如果您试图查找匹配的列(join子句),则将使用join和not UNION


另外,请尝试解释并解释查询的扩展前缀,以了解查询计划。

特别感谢@dnoeth。伟人

修改后的SQL是

select q_internal_external_table.*,q_five_internal_external_table.* from         
(select q_internal_table.q_part_id, 
q_external_table.q_external_id,q_external_table.q_external_approve, 
q_external_table.q_order_id,q_internal_table.q_internal_id, 
q_internal_table.q_internal_approve from(SELECT parts.id as 
q_part_id,parts.order_id as q_order_id,external_reports.id as 
q_external_id,external_reports.approved as q_external_approve from parts 
LEFT join external_reports on(parts.id=external_reports.part_id)) 
q_external_table LEFT join (SELECT parts.id as q_part_id,internal_reports.id 
as q_internal_id,internal_reports.approved as q_internal_approve from parts 
LEFT join internal_reports on(parts.id=internal_reports.part_id)) 
q_internal_table on(q_external_table.q_part_id=q_internal_table.q_part_id) 
where (q_external_table.q_external_approve='Y' or 
q_internal_table.q_internal_approve='Y')) q_internal_external_table LEFT 
join (select q_five_internal_table.q_five_part_id, 
q_five_internal_table.q_five_internal_id, 
q_five_internal_table.q_five_internal_approve, 
q_five_external_table.q_five_order_id, 
q_five_external_table.q_five_external_id, 
q_five_external_table.q_five_external_approve from (SELECT parts.id as 
q_five_part_id,parts.order_id as q_five_order_id, 
five_way_external_reports.id as q_five_external_id, 
five_way_external_reports.approved as q_five_external_approve from parts 
LEFT join five_way_external_reports on(parts.id= 
five_way_external_reports.part_id)) q_five_external_table LEFT join (SELECT 
parts.id as q_five_part_id,five_way_internal_reports.id as 
q_five_internal_id,five_way_internal_reports.approved as 
q_five_internal_approve from parts LEFT join five_way_internal_reports 
on(parts.id=five_way_internal_reports.part_id)) q_five_internal_table on 
(q_five_external_table.q_five_part_id=q_five_internal_table.q_five_part_id) 
where (q_five_external_table.q_five_external_approve='Y' or 
q_five_internal_table.q_five_internal_approve='Y')) 
q_five_internal_external_table on (q_internal_external_table.q_part_id 
=q_five_internal_external_table.q_five_part_id)
答案:(我想要的)
特别感谢@dnoeth。伟人

修改后的SQL是

select q_internal_external_table.*,q_five_internal_external_table.* from         
(select q_internal_table.q_part_id, 
q_external_table.q_external_id,q_external_table.q_external_approve, 
q_external_table.q_order_id,q_internal_table.q_internal_id, 
q_internal_table.q_internal_approve from(SELECT parts.id as 
q_part_id,parts.order_id as q_order_id,external_reports.id as 
q_external_id,external_reports.approved as q_external_approve from parts 
LEFT join external_reports on(parts.id=external_reports.part_id)) 
q_external_table LEFT join (SELECT parts.id as q_part_id,internal_reports.id 
as q_internal_id,internal_reports.approved as q_internal_approve from parts 
LEFT join internal_reports on(parts.id=internal_reports.part_id)) 
q_internal_table on(q_external_table.q_part_id=q_internal_table.q_part_id) 
where (q_external_table.q_external_approve='Y' or 
q_internal_table.q_internal_approve='Y')) q_internal_external_table LEFT 
join (select q_five_internal_table.q_five_part_id, 
q_five_internal_table.q_five_internal_id, 
q_five_internal_table.q_five_internal_approve, 
q_five_external_table.q_five_order_id, 
q_five_external_table.q_five_external_id, 
q_five_external_table.q_five_external_approve from (SELECT parts.id as 
q_five_part_id,parts.order_id as q_five_order_id, 
five_way_external_reports.id as q_five_external_id, 
five_way_external_reports.approved as q_five_external_approve from parts 
LEFT join five_way_external_reports on(parts.id= 
five_way_external_reports.part_id)) q_five_external_table LEFT join (SELECT 
parts.id as q_five_part_id,five_way_internal_reports.id as 
q_five_internal_id,five_way_internal_reports.approved as 
q_five_internal_approve from parts LEFT join five_way_internal_reports 
on(parts.id=five_way_internal_reports.part_id)) q_five_internal_table on 
(q_five_external_table.q_five_part_id=q_five_internal_table.q_five_part_id) 
where (q_five_external_table.q_five_external_approve='Y' or 
q_five_internal_table.q_five_internal_approve='Y')) 
q_five_internal_external_table on (q_internal_external_table.q_part_id 
=q_five_internal_external_table.q_five_part_id)
答案:(我想要的)

1)预期结果是什么?2) 你尝试过什么?这些尝试出了什么问题?你是说一个联盟-谷歌that@Shadow当前位置我更新了问题。我想加入这两个答案。我还添加了我尝试过的SQL。类似于
select*from(1st select)作为t1连接(2nd select)作为t1.q\u part\u id=t2.q\u five\u part\u id
。连接意味着什么?请演示使用问题中已有的7+3记录。1)预期结果是什么?2) 你尝试过什么?这些尝试出了什么问题?你是说一个联盟-谷歌that@Shadow当前位置我更新了问题。我想加入这两个答案。我还添加了我尝试过的SQL。类似于
select*from(1st select)作为t1连接(2nd select)作为t1.q\u part\u id=t2.q\u five\u part\u id
。连接意味着什么?请演示使用问题中已有的7+3记录。在不知道预期输出的情况下,它可能是一个
联合
,除了
交叉
,也:-)感谢您的帮助。但是在回答中没有显示第二个查询结果。在不知道预期输出的情况下,它可能是一个
联合
,除了
交叉
,也:-)感谢您的帮助。但在回答中,第二个查询结果没有显示。