Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL jointure externe gauche avec la clause where - renvoie des lignes sans correspondance

Oui. Le where clause transforme la jointure externe gauche en jointure interne.

Pourquoi? La valeur de pe.pqid est NULL (comme pe.uid ) lorsqu'il n'y a pas de correspondance. Donc la comparaison dans le where la clause échoue (presque toutes les comparaisons avec NULL renvoie NULL qui est considéré comme faux).

La solution est de déplacer la comparaison vers le on clause :

SELECT pq.id, pq.data, pe.data
FROM pq LEFT OUTER JOIN
     pe
     ON pq.id = pe.pqid and
        pe.uid='12345'
ORDER BY pq.id LIMIT 2