完全外连接sql

时间:2017-03-16 08:29:34

标签: php sql

我创建了2个简单的表。 tableA和表B,都只有1列'po'。 我正在尝试使用FULL OUTER JOIN将2表组合在一起。

错误输出为警告: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'];
}
?>

2 个答案:

答案 0 :(得分:1)

如果你需要一个联合表,你需要和联合你不能使用FULL OUTER JOIN,因为这在mysql中不可用..但你可以模拟和联合选择

union子句意味着只为两个表合并了distint值..

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

union all意味着从两个表中选择所有行(也是重复的)

      $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"; 

答案 1 :(得分: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