/ / jointure externe complète sql - php, sql

jointure externe complète sql - php, sql

J'ai créé 2 tables simples. tableA et table B, les deux ont seulement 1 colonne "po". J'essaie de combiner la table 2 en utilisant FULL OUTER JOIN.

La sortie d'erreur est Avertissement: mysqli_fetch_array () attend que le paramètre 1 soit mysqli_result.

Je suppose donc que ma requête est erronée. Appréciez toute aide ici!

<?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"];
}
?>

Réponses:

1 pour la réponse № 1

Il n'y a pas FULL OUTER JOIN construit avec MySQL. Mais, vous pouvez simuler votre requête via:

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

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

Lire ici pour plus d'informations: Rejoindre complètement externe dans MySQL


1 pour la réponse № 2

si vous avez besoin d’une table unie dont vous avez besoin et d’une union Vous ne pouvez pas utiliser FULL OUTER JOIN car elle n’est pas disponible dans mysql.

La clause union implique que seules les valeurs de distint sont fusionnées pour les deux tables.

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

l'union tout implique la sélection de toutes les lignes (également dupliquées) des deux tables

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

sinon, si vous avez besoin d'une jointure réelle (avec la colonne sur les mêmes lignes), vous pouvez utiliser JOIN (jointure interne .. ou jointure gauche, ou droite) en fonction de la manière dont vous avez besoin de joindre la table.

c'est pour la jointure interne

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