Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.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 右键连接选择结果_Php_Mysql_Sql - Fatal编程技术网

Php 右键连接选择结果

Php 右键连接选择结果,php,mysql,sql,Php,Mysql,Sql,我有五张桌子tb1、tb2、tb3、tb4和tb5 这是select查询 SELECT c.COL1, f.COL2, SUM(a.colx1* l.clox2) AS COL3 FROM tb1 c JOIN tb2 b ON (c.id = b.idC) JOIN tb3 l ON (b.id = l.idB) JOIN tb4 a ON (a.id = l.idA) JOIN tb5 f ON (f.id = a.idF) GROUP BY c.COL1, f.COL2

我有五张桌子tb1、tb2、tb3、tb4和tb5

这是select查询

SELECT c.COL1, f.COL2, SUM(a.colx1* l.clox2) AS COL3 
FROM tb1 c
  JOIN tb2 b ON (c.id = b.idC)
  JOIN tb3 l ON (b.id = l.idB)
  JOIN tb4 a ON (a.id = l.idA)
  JOIN tb5 f ON (f.id = a.idF) 
GROUP BY c.COL1, f.COL2
+-----------+-------+-----------+
| COL1      | COL2  | COL3      |
+-----------+-------+-----------+
| project1  | FAM1  | 1250.251  |
| project1  | FAM2  | 2145.325  |
| project2  | FAM1  | 2146.152  |
| project3  | FAM2  | 1248.002  |
| project4  | FAM1  | 3201.684  |
| project4  | FAM2  | 7325.981  |
| project5  | FAM1  | 4657.684  |
这是select查询的结果

SELECT c.COL1, f.COL2, SUM(a.colx1* l.clox2) AS COL3 
FROM tb1 c
  JOIN tb2 b ON (c.id = b.idC)
  JOIN tb3 l ON (b.id = l.idB)
  JOIN tb4 a ON (a.id = l.idA)
  JOIN tb5 f ON (f.id = a.idF) 
GROUP BY c.COL1, f.COL2
+-----------+-------+-----------+
| COL1      | COL2  | COL3      |
+-----------+-------+-----------+
| project1  | FAM1  | 1250.251  |
| project1  | FAM2  | 2145.325  |
| project2  | FAM1  | 2146.152  |
| project3  | FAM2  | 1248.002  |
| project4  | FAM1  | 3201.684  |
| project4  | FAM2  | 7325.981  |
| project5  | FAM1  | 4657.684  |
但是如果projectx没有FAMx,我想用这种格式显示结果

+-----------+-------+-----------+
| COL1      | COL2  | COL3      |
+-----------+-------+-----------+
| project1  | FAM1  | 1250.251  |
| project1  | FAM2  | 2145.325  |
| project2  | FAM1  | 2146.152  |
| project2  | FAM2  | NULL      |
| project3  | FAM2  | NULL      |
| project3  | FAM2  | 1248.002  |
| project4  | FAM1  | 3201.684  |
| project4  | FAM2  | 7325.981  |
| project5  | FAM1  | 4657.684  |
| project5  | FAM1  | NULL      |
这是我用
右连接进行的测试
不起作用!我错过了什么

CREATE TEMPORARY TABLE tempt AS
   SELECT c.COL1, f.COL2, SUM(a.colx1* l.clox2) AS COL3 
    FROM tb1 c
      JOIN tb2 b ON (c.id = b.idC)
      JOIN tb3 l ON (b.id = l.idB)
      JOIN tb4 a ON (a.id = l.idA)
      JOIN tb5 f ON (f.id = a.idF) 
    GROUP BY c.COL1, f.COL2;
SELECT t.* FROM tempt t RIGHT JOIN tb5 f ON (f.COL2 = t.COL2)
tab5表的结构

+----+--------+------+
| id | COL1   | COL2 |
+----+--------+------+
|1   | F1     | FAM1 |
|2   | F2     | FAM2 |
+----+--------+------+

左联接或右联接本身无法在所有“project”和“FAM”值之间创建所需的额外关系

您需要构造交叉连接以获得所需的所有行

SELECT c.COL1, f.COL2, t.COL3 
FROM tb1 c
CROSS JOIN tb5 f
LEFT JOIN tempt t ON t.COL1=c.COL1 and t.COL2=f.COL2
如果tbl1.COL1或tbl5.COL2不是唯一的,则需要添加一个SELECT DISTINCT

或者,整个过程可以归结为:

SELECT c.COL1, f.COL2, SUM(a.colx1* l.clox2) AS COL3 
FROM tb1 c
  CROSS JOIN tb5 f
  LEFT JOIN tb2 b ON (c.id = b.idC)
  LEFT JOIN tb3 l ON (b.id = l.idB)
  LEFT JOIN tb4 a ON (a.id = l.idA and f.id = a.idF)
GROUP BY c.COL1, f.COL2

右连接的位置在哪里?从(f.COL2=f.COL2)的(f.COL2=f.COL2)上的tb5 f右连接中选择t.?可能是(t.COL2=f.COL2)上的
…这是一个原型示例,我试过这个(t.COL2=f.COL2),它不起作用