2017-03-16 80 views
0

我创建了2个简单表。 tableA和tableB,都只有1列'po'。 我正在尝试使用FULL OUTER JOIN将2个表结合在一起。全外连接sql

错误输出是警告:mysqli_fetch_array()期望参数1是mysqli_result。

所以我想我的查询几乎是错的。感谢这里的任何帮助!

<?php 
include 'db.php'; 

$sqlcount="SELECT DISTINCT po FROM testonly FULL OUTER JOIN testonly2 ON testonly.po=testonly2.po"; 

$resultcount = mysqli_query($conn,$sqlcount); 
while($row = mysqli_fetch_array($resultcount)){ 
echo $row['po']; 
} 
?> 

回答

1

没有内置MySQL的FULL OUTER JOIN

SELECT * FROM testonly t1 
LEFT JOIN testonly2 t2 ON t1.po = t2.po 
UNION          -- use UNION ALL to retain common rows 
SELECT * FROM testonly t1 
RIGHT JOIN testonly2 t2 ON t1.po = t2.po 

PHP代码:但是,你可以通过模拟查询

$sqlcount = "SELECT * FROM testonly t1 LEFT JOIN testonly2 t2 ON t1.po = t2.po UNION ALL SELECT * FROM testonly t1 RIGHT JOIN testonly2 t2 ON t1.po = t2.po"; 

这里阅读更多信息:Full Outer Join in MySQL

+0

惯于此返回常见的行两次? – jarlh

1

,如果你需要一个统一的表格,你需要和工会不能使用FULL OUTER JOIN,因为这不是在mysql中可用的..但宥可以效仿和工会选择

UNION子句意味着只有distint值合并两个表..

 $sqlcount="SELECT po 
        FROM testonly 
        UNION 
        testonly2 "; 

工会都来自这两个表意味着选择所有行(也复制)的

 $sqlcount="SELECT po 
        FROM testonly 
        UNION ALL 
        testonly2 "; 

否则,如果你需要一个真正的连接(在同一行博特列),你可以根据你需要加入表

这是方式使用JOIN(内部连接..或左连接或右)内部连接

$sqlcount="SELECT DISTINCT t1.po, t2.po 
    FROM testonly t1 INNER JOIN testonly2 t2 ON testonly.po=testonly2.po";